class A
{};
class B : public A
{};
voidOnStart()
{
A* ab = new B;
A* aa = new A;
B* bb = ab; // ok
B* ba1 = dynamic_cast<B*>(aa);
Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast
B* ba2 = aa; // здесь неконтролируемый вылетPrint(ba2 ? "ba2 ok" : "ba2 bad cast");
}
你没有注意到。
或者说你,让我们直奔主题。
我提供了一个最简单的变体,它可以在明天(而不是10年后)实现,并且与C++相似(否则为什么要改变任何东西)。此外,如果operator*()没有也不会被实现(论坛上有相关信息),不清楚为什么operator->()会突然被实现(它们的顺序相同)。
明天或10年后都不需要这种形式。而且你不需要外部相似性,你需要的是功能。
至少从C++中部分地移植STL。这里不仅关系到运营商-->,我们需要更多。
operator->将是向智能指针迈出的第一步。
事实上,隐性演员现在的情况并不乐观。
你可以看到,动态铸造包括在隐式铸造中
但
首先,我们不知道为什么在语言中明确存在动态投射的情况下会包括它。
其次,它被包含得非常糟糕,因为在函数的情况下,动态投掷的错误是可以控制的(错误的指针输出),但隐式投掷不能!因为它抛出一个不可控制的异常。
2018.11.23 20:31:47.348 test (AUDNZD,M5) 'test.mq5'中指针的铸造不正确(17,11)
它没有任何影响。
你要么给出一个无效的指针作为一个函数,要么把动态投射排除在隐式投射之外,并给出一个编译错误。
是的,有了这个问题,用OOP工作是很难控制的,也是不可靠的。 在某个地方,你在程序的一个地方改变了类型,然后它在谁也不知道的地方爆炸了。 在这些例子中,你可以在某种程度上用拐杖逃脱,因为有简单的指针赋值,而且一切都在你面前。 但在一般情况下,当一个指针被传递到某个函数,并动态地转换为未知的东西,你没有办法来控制它。
点是MQL中的一个通用运算符。
这取决于你如何看待它。你可以说它是通用的:它对对象和指针都有效。
或者你可以说,.只对对象起作用,而且只在指针被隐含地转换为对象的情况下对指针起作用,即在
参赛作品
相当于不
a
有这样的结构
有一个变量OrdersInfo顺序,当我试图把它写进一个文件时
编译器给出了:'order' - 不允许包含对象的结构
可能是什么问题?
有这样的结构
有一个变量OrdersInfo顺序,当我试图把它写进一个文件时
编译器给出了:'order' - 不允许包含对象的结构
可能是什么问题?
这里
https://www.mql5.com/ru/docs/files/filewritestruct
列出了这些限制。
MT4上的UPU 流量为负值,下载历史计数器开始增加 ...