对变量的行为感到困惑 - 页 4

 
wlad:
总的来说,我希望开发者能注意到

开发商与此有什么关系?你想让他们在他们的服务器上存储你的变量吗?当你的电脑因为停电而挂起和重启的时候?
 
wlad:

自己测试一下吧。

你会看到这一切是怎么回事


我为你感到难过(()。
 

你在说什么呢?

我还没有得到任何真正的答案。

事实是,有一个问题

 
真正的关节(在某人的头上)
 
Vinin:
真正的关节(在某人的头上)
你向我解释一下为什么会发生这种情况。
 
已经向你解释过了,你只是不想听别人的意见。
 
Vinin:
已经向你解释过了,你只是不想听别人的意见。

为什么

其中,当外部变量发生变化时,全局变量将采用其值。

 

而且只发生在丁字裤上。

对于其他类型,它可以正常工作。

告诉我,我哪里错了。

 

下面是一个比较字符串和ints行为的例子

extern string ValueString = "DDD";
extern int    ValueInt    = 10;  
     
string tempString="";
int    tempInt=0;

bool   firsttime=true;
       
int start() {
   string txt=StringConcatenate( "  ValueString: ",ValueString," < >","  tempString: ",tempString,"\n",
                                 "  ValueInt: ",   ValueInt,   " < >","  tempInt: ",tempInt,"\n",
                                 "  firsttime: ",firsttime);    
   if(firsttime) {     // значение присваевается тольо ОДИН раз   
      tempString=ValueString; 
      tempInt=ValueInt; 
      firsttime=false; 
   }

   Print(txt);
   Comment(txt);                              
}

并输出到日志。

1.加载EA和启动全局变量

2. 将外部变量转移到全局变量。通过bool firsttime实现一次性转移

3.外部变量的变化

4.这里可以看出区别。

tempString取ValueString的值-- 错误

tempInt保持其值,即使ValueInt已经改变 -正确

5和6与3和4相似


请解释为什么字符串的行为是不同的

而Int是正确的

请给我具体的答案。

 
wlad:

请解释为什么字符串的行为是不同的

虽然这是事实。

我问的是具体的答案。

我不能说得很具体,我找不到这些链接。

我在论坛上的某个地方看到,当编译器检测到具有相同数值的字符串变量时,它会将它们放入相同的实际内存中,并向需要引用它的人引用它。

所以,你可能是对的,它们必须写在一个变量中。理论上,这可能是一个优化器的错误。写信给servicedesk,把你的例子和代码一起发过去,他们会解决这个问题。

这里也有重复的内容: MetaTrader 4 Build 529测试版与新的编译器已被发布

--

// 但根据我的经验,我从来没有遇到过无法解决的问题。