エラー、バグ、質問 - ページ 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で許可されている単項演算子のうち、デリファレンス操作を実装するためのベストプラクティスとして提案されているものはどれですか?

  • 単項演算子 +,-,++,--,!,~.

いやあ、この掲示板にはベストプラクティスを考える人がいるんですね。

最も論理的なのは、それがないためにシフトすることです。(すみません、パラメータが必要で、その後に滅多に使わないものとして追加します) でも、1つでも大丈夫でしょうか?

せいぜいこのくらいでいいんです。

(~w).F()です。

ポイント優先のため、必ずブラケットをかける必要があります。

 
Sergey Dzyublik:

開発者の方に質問です。
MQLで許可されているどの単項演算子のオーバーロードが、再参照操作の実装のベストプラクティスとして提案されていますか?

  • 単項演算子 +,-,++,--,!,~.

MQLでは何を再参照できるのですか?- オブジェクトへのポインタであっても、ポインタ名でアクセスした場合は、デリファレンスされます。

SZZY:そのエネルギーを何か役に立つことに注げばいいのですが......。先月、何度目かの二次元配列のラッパークラスを作ろうとしたら、普通の二次元配列 arr[1][2] としてアドレスするための [] をオーバーロードすることができず、MQL でポインタを再参照するという話か ...

 
Igor Makanu:

通常の2次元配列arr[1][2]としてアドレスするために[]をオーバーロードすることはできていませんし、MQLのポインタ・デレフェレンシングの話ですか......。

あるある)