class A{
public:
int ivalue;
int inc()const {staticint v = 0; return(++v);}
A():ivalue(0){}
};
class B{
public:
int ivalue;
int inc(){return(++ivalue);}
B():ivalue(0){}
};
//+------------------------------------------------------------------+voidOnStart()
{
const A a;Print(a.inc());
B b1;
Print(b1.inc());
const B b2;Print(b2.inc()); // 'inc' - call non-const method for constant object
}
//+------------------------------------------------------------------+
这一切也都在这里。
不对!
我专门在VS2019中检查过。
错误 CS0133 分配给 "a "的表达式必须是常数。 ConsoleApp2 ...\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Active
错误 CS0133 分配给 "b "的表达式必须是常数。 ConsoleApp2 ...\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Active
去年不是这样的--我专门测试了常量修改器
似乎@Ilyas 解释了如何运行一个MQL程序,首先所有的常量和静态都被初始化,不管它们在哪里被定义,然后调用类的构造函数。
好的,有了这个初始化的静态/常量--它仍然可以被正确地分发,但事实上,常量修改器并不能保证编译器会检查它--非常意外--我的第二个例子
在你的两个例子中,一切工作都是正确的,而且是预期的。
在你的两个例子中,一切工作都是正确的,而且是预期的。
预期的是,const修改器99%确保编译器在编译时能发现我的错误,VS2019会这样做,MQL不会这样做
预期的const修改器是99%确保编译器会在编译时发现我的错误,VS2019会这样做,MQL不会这样做。
你到底认为什么是错误?
我在VS2019中没有得到任何错误。
去年不是这样的--我专门测试了常量修改器
而且似乎@Ilyas 解释了如何运行MQL-程序,首先所有的常量和静态变量都被初始化,不管它们在哪里被描述,然后调用类构造器。
这似乎是带有const/static修改器的全局变量,而你使用的是局部变量。
你到底认为什么是错误?
我在VS2019中没有得到任何错误。
错误在于MQL编译器允许模棱两可的表达方式,如果有一个const修饰符,那么它就是一个常量。
同样的代码没有 被编译器追踪到? 另一种情况已被追踪到。
VS2019中的夏普在编译前就发现了它。
你一定是指带有 const/static 修饰符的全局变量,而你使用的是局部变量。
我可能被搞糊涂了,但const修改器的行为与C#非常不同
一个用const修饰符声明的变量不能被改变。编译器会跟踪这一点。
你可能期望它做别的事情。
你可能期望从它那里得到不同的东西。
显然是的,我希望在MQL和C#之间跳转时是一样的。
2366号建筑
谢谢你的帖子,我将检查
mq5 - 正常。mq4 - 破损。你可以从这里 获取TypeToBytes_ExampleScript.mq4。 只有当你把扩展名改为mq5时,它才能编译。