模板参数=void*的编译器错误 - 页 4

 
Dmitry Fedoseev:

你有没有试着阅读你给我们的链接?斯拉瓦在那里通俗地解释了为什么会这样--因为在旧的MQL4中,优先权被混淆了。因此,现在重要的是吸引注意力。只有一个警告也不好,如果有一个错误就更好了。

或者,一记耳光打在脸上

 
Dmitry Fedoseev:

你有没有试着阅读你给我们的链接?斯拉瓦在那里通俗地解释了为什么会这样--因为在旧的MQL4 中,优先权被混淆了。因此,现在重要的是吸引注意力。只有一个警告也不好,如果有一个错误就更好了。

那么?在这里。

int i = 1 << 2 + 3;

此外,在MQL4中,优先级也被混为一谈?这是关于一般的方法,而不是特殊的情况。在特殊情况下, ,你 可以给出一个警告/错误(作为例外),但为什么要扩大到其他一切呢?

此外,在MQL4中(据我所知),让我们说||操作符没有懒惰性。尽管这样,MQL5编译器在类似的情况下并没有产生警告(它并不建议将||分成几个原子操作)。

由此可见,历史的相应一页是颠倒的

 

我想在此补充一下...文件 都说。

"为了改变 操作的顺序,使用括号,它具有最高的优先权"。

这意味着为其他目的(与改变顺序无关)使用括号仍必须有正当理由

 
fxsaber:

我想知道,当人们应该犹豫不决时,程序员人数的门槛在哪里?5是不够的。1,000是不够的。10,000 - 犹豫不决。然后最后是N--信任。然而,当它是(N-1)--我还不相信它。

阈值不是以绝对值 来定义的,而是以占认为相反的人数的百分比来定义的。大多数人可能是错的,但不是99%是一个可靠的标准

 
A100:
而在1961x32中,一切都很正常......耶!

嗯,有趣的功能。从现在开始,我也会指定平台的比特率

 
A100:

那么?在这里。

int i = 1 << 2 + 3;

在MQL4中,优先级也被混淆了?

是的,文档中 说,旧版本的优先级是不同的。

但在我看来,这一切早已变得无关紧要了。而且,如果指定了严格指令,就更应该如此。而且,如果有人挖出古老的代码并试图编译它,无论如何,他/她将不得不在那里重做很多事情。所以这些警告是过去的遗物。这就是为什么我同意,你不应该在真空中抛出警告。

 
对不起,如果你知道,除了(int)StringFormat("%i",ptr)之外,在mql中是否有办法从void*ptr获得int?
 
A100:

所以在你的代码中,方括号并不意味着什么,声明...似乎不符合逻辑,而且在括号的情况下,我们需要了解优先级/顺序是否真的改变了,而在我的代码中,括号本身就意味着优先级/顺序的改变(括号的存在/不存在使一切都很清楚)。

支架
fxsaber
A100

难以理解
业务的优先次序被颠倒

操作的优先级没有改变
行动的优先次序没有改变

括号使表达式完全不含糊。

警告本身(不仅是关于括号的)不是告诉我们错误,而是告诉我们有可能发生错误。但你建议完全摆脱所有的警告,因为优先级(不仅是用括号)在编译器中明确规定。

A100:

阈值不是以绝对值 来定义的,而是以认为不合适的人数的百分比比例来定义的。大多数可能是错的,但不是99%是一个可靠的标准

同样的问题,关于这个数字不是绝对的,而是相对的。98%是一个可靠的标准吗?А 97%?当你不得不开始怀疑可靠性时,那个门槛在哪里?即使你周围的人100%声称你是一个杀人狂。这是一个可信的标准吗?

 
Ilya Malev:
对不起,离题了,如果有人知道,可以告诉我:在mql中,除了(int)StringFormat("%i",ptr)之外,有没有办法从void*ptr获取int?

只通过字符串,我曾经通过StringConcatenate() 获得指针地址,像这样。

Cinteger *x = new Cinteger();
   string s;
   int zz=StringConcatenate(s,"*x = ",x);
   Print("OK ",s);
 
Alexey Navoykov:

最微不足道的例子是数组类。 在这种情况下,它被用来存储任何指针。

坦率地说,这种阵列的用途令人怀疑。你能用它做什么?你知道你不会为数组成员自动调用删除,对吗?

原因: