class B
{
private:
int m_width;
int m_length;
public:
void Reset() { m_width = 0; m_length = 0; }
}
class A
{
private:
B m_member;
public:
B GetBMember() const { return( m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();
class B
{
private:
int m_width;
int m_length;
public:
void Reset() { m_width = 0; m_length = 0; }
}
class A
{
private:
B m_member;
public:
B * GetBMember() const { return( & m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();
所以我遗憾地承认,MQL编译器并不像我想象的那么聪明)。我甚至可以说它一点都不聪明。 ) 我试着做了一些简单的例子,结果发现,即使我创建了一个假的对象,它不在任何地方使用,也不做任何事情,编译器也不关心它。它根本就没有优化。我是单从速度上判断的。而且由于某些原因,它在新的构建中比在旧的构建中工作得更慢。
开发商意识到 了这一点。但是,编译器的这种优化远远不是要解决的优先任务。
编译器也有这种 模糊不清的地方。
开发商意识到 了这一点。但是,编译器的这种优化远远不是要解决的优先任务。
是的,但这实在令人吃惊:他们先前在这里夸下海口,说他们把优化器的质量提高到了前所未有的高度,但实际上它连这么简单的事情都处理不了。更不用说那些更复杂的了。
这就是为什么我建议在OnTesterInit中增加改变默认通过表的功能。
我假设参数集本身并不存储在系统中,而是通过组合的唯一编号(现在它与通行证编号重合)来计算。因此,只可能改变组合的顺序,而不可能改变它们的组成。因此,在这种情况下,它将是类似于SwapPasses(long index1, long index2)的东西。
但我可能是错的。
我假设参数集本身并不存储在系统中,而是使用唯一的组合号(现在它与通行证号重合)进行计算。因此,你只能改变组合的顺序,但不能改变它们的组成。即在这种情况下,它应该是像SwapPasses(long index1, long index2)这样的。
情况可能是这样的。现在,顺序仍然可以在某种程度上受到EA源中交换输入行的影响。
情况可能是这样的。现在,顺序可以通过EA源代码中的交换输入行来进行某种程度的影响。
它杀死了优化算法--就像在随机方向上进行优化。
这就扼杀了优化算法--就像在一个随机的方向上进行优化。
我们首先讨论的是完全超标的问题。
我正在慢慢学习OOP,遇到了一件不明显的事情。
有一个类A,它的字段是另一个类B的对象。
在类A中,有一个常量方法 被调用,它返回一个类B的对象。
之后,调用B类的一个方法,该方法删除了返回对象的参数。
它看起来像这样(这个例子是简化的,在浏览器中写的)。
结果是Reset()不起作用,即m_member字段没有被清除。
问题:编译器不应该在构建时报告(错误/警告),一个常量对象的非常量方法正在被调用(或类似的情况)?
问题:编译器不应该在构建时报告(错误/警告)一个非常量方法正在为一个常量对象调用(或类似的东西)?
也许原因是由于Reset 被调用为一个临时对象而隐含的复制构造器调用。
也许原因是由于Reset 被调用为一个临时对象而隐含的复制构造器调用。
我正在慢慢学习OOP,遇到了一件不明显的事情。
有一个类A,它的字段是另一个类B的对象。
在类A中,有一个常量方法 被调用,它返回一个类B的对象。
之后,调用B类的一个方法,该方法删除了返回对象的参数。
它看起来像这样(这个例子是简化的,在浏览器中写的)。
结果是Reset()不起作用,即m_member字段没有被清除。
问题:编译器不应该在构建时报告(错误/警告),一个常量对象的非常量方法正在被调用(或类似的情况)?