class A
{
private:
int f1(){Print(__FUNCTION__); return(1);}
int f2(){Print(__FUNCTION__); return(2);}
public:
int func(int v){constint a = f1(); constint b = f2(); return(a+b+v);}
};
A a1,a2;
//+------------------------------------------------------------------+voidOnStart()
{
Print("1. ",a1.func(1));
Print("2. ",a1.func(2));
Print("3. ",a2.func(3));
Print("4. ",a2.func(4));
}
//+------------------------------------------------------------------+
class A
{
private:
int f1()const {staticint v1=1; Print(__FUNCTION__); return(v1++);}
int f2()const {staticint v2=1; Print(__FUNCTION__); return(v2++);}
public:
int func(int v){constint a = f1(); constint b = f2(); return(a+b+v);}
};
2365 - 代码中洒满了错误。还没有时间去弄清楚。我回滚到2361年--它是好的。在mq4中--同样的情况。
谢谢你的留言,我将检查
似乎是在调用基类的构造函数时的参数传递。
Bug MT5 (build 2365)当通过引用传递的指针 被用作构造器参数时,使用赋值运算符对类的隐式构造器 调用出现编译错误。
如果用值传递取代指针传递,一切都会正常。
谢谢你的帖子,已修复
MT5错误(build 2365)当模板类的模板参数被用作基类时,调用基类构造器时 出现编译错误。
在MT5(build 2363)中没有问题。
我们可以看到,现在对象的ArrayResize更快。
再一次,ArrayResize函数的一个部分的复杂性从对数降低到了零
非常感谢你为保留内存加快ArrayResize 的速度。
MT5(build 2365)在实际项目中std::vector::push_back比之前的build快1.5倍。
而std::vector:resize滞后从2.2倍下降到1.45倍。
build 2366,我认为现在的常量不能正确工作了
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 1.4
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 2.5
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 3.6
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 4.7
如果你用static代替const,它将按预期工作--在a和b的初始化过程中调用f1()和f2()。
2020.03.21 12:58:03.496 tst (EURUSD,H1) A::f1
2020.03.21 12:58:03.496 tst (EURUSD,H1) A::f2
2020.03.21 12:58:03.496 tst (EURUSD,H1) 1.4
2020.03.21 12:58:03.496 tst (EURUSD,H1) 2.5
2020.03.21 12:58:03.496 tst (EURUSD,H1) 3.6
2020.03.21 12:58:03.496 tst (EURUSD,H1) 4.7
如果你这样写代码,那就完全是一个抓不住的错误了
build 2366,我认为现在的常量不能正确工作了
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 1.4
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 2.5
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 3.6
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f1
2020.03.21 12:55:59.904 tst (EURUSD,H1) A::f2
2020.03.21 12:55:59.904 tst (EURUSD,H1) 4.7
如果你用static代替const,它将按预期工作--在a和b的初始化过程中调用f1()和f2()。
2020.03.21 12:58:03.496 tst (EURUSD,H1) A::f1
2020.03.21 12:58:03.496 tst (EURUSD,H1) A::f2
2020.03.21 12:58:03.496 tst (EURUSD,H1) 1.4
2020.03.21 12:58:03.496 tst (EURUSD,H1) 2.5
2020.03.21 12:58:03.496 tst (EURUSD,H1) 3.6
2020.03.21 12:58:03.496 tst (EURUSD,H1) 4.7
这正是它应该工作的方式。
如果你这样写代码,这完全是一个无法检测的错误。
这里的一切也都是正确的。
这正是它应该工作的方式。
去年不是这样的--我专门测试了常数修改器
似乎@Ilyas 解释了如何运行一个MQL程序,首先所有的常量和静态都被初始化,不管它们在哪里被描述,然后调用类的构造函数。
OK,有了这个初始化的静态/常量--它仍然可以被正确地分发,但事实上,常量修饰符并不能保证编译器会检查这一点,这是非常意外的--我的第二个例子