错误、漏洞、问题 - 页 2466

 

逻辑错误

void f( const int  ) {}
void f( const int& ) {}
void OnStart()
{
          int i = 0; f( i ); //(1) нормально
    const int j = 0; f( j ); //(2) Error: 'f' - ambiguous call to overloaded function with the same parameters
}

(1)和(2)之间的区别是什么?

 
A100:

逻辑错误

(1)和(2)之间的区别是什么?

第1条中似乎有一个错误。而第2个可以通过j+0来绕过。

 
fxsaber:

第1条中似乎有一个错误。而第2个可以通过j+0 来绕过。

为什么我们需要额外的算术运算,而我们可以不用它?

        const int j = 0; f((int)j);
 
A100:

为什么要进行额外的算术运算

编译后就不会再有了。

 
fxsaber:

编译后就不会再有了。

它将。只是在一般情况下,编译时的错误会转为运行时的错误。

void f( const int  ) { Print( 1 ); }
#define  int short
//...
void f( const int  ) { Print( 2 ); }
void f( const int& ) { Print( 3 ); }
void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f( j+0 );  //1
}

结果:2:1

而在我的 版本中:2:2

void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f((int)j); //2
}
 
A100:

它将。只是在一般情况下,编译时的错误会转变成运行时的错误。

结果:2:1

其结果是在源头上混为一谈。我不认为有一个运行时间的补充。这只是编译器调用表达式的int函数而已。但它并不计算表达式本身。

 

正在考虑为C++实现一个迭代器的类似物。但有一种悲哀出现在....


给开发者的问题。
在MQL中允许的单数运算符中,哪一个被建议为实现取消引用操作的最佳做法?

  • 单数 +,-,++,--,!,~
 
Sergey Dzyublik:

在MQL中允许的单数运算符中,哪一个被建议为实现取消引用操作的最佳做法?

  • 单数 +,-,++,--,!,~

哇,这个论坛上有一些人在思考最佳做法。

最合乎逻辑的事情是转移,因为缺乏它。(对不起,它需要一个参数,然后加为很少使用的参数)但即使有一个参数,它也能正常工作吗?

我们最多只能以这种方式获得。

(~w).F()。

由于点数优先,你总是要把它括起来。

 
Sergey Dzyublik:

给开发者的问题。
建议将MQL中允许的哪一个单数运算符重载作为实现解除引用操作的最佳做法?

  • 单数 +,-,++,--,!,~

在MQL中什么可以被取消引用?- 即使是对象的指针,在通过指针名称访问时也会被取消引用。

SZZY:我希望你能把你的能量转化为有用的东西....。上个月,我无数次试图为一个二维数组做一个封装类,我无法设法将[]重载为普通二维数组arr[1][2]的地址,而你正在谈论MQL中对指针的解引用...

 
Igor Makanu:

我还没有设法将[]重载为一个正常的二维数组arr[1][2]的地址,而你在谈论MQL中的指针解除引用...

它发生了)))。