エラー、バグ、質問 - ページ 1691

 
コード生成エラー
void OnStart()
{
  int a = {0}; // code generation error
}
 
Andrey Dik:

CopySpread()関数は、対応するチャート 期間についてどのようなスプレッド値を生成するのですか?

平均値なのか、最小値なのか、最大値なのか、関数のヘルプにも何も書かれていないので、よくわからない。

 
Andrey Dik:

CopySpread()関数は、対応するチャート 期間についてどのようなスプレッド値を生成するのですか?

平均値なのか、最小値なのか、最大値なのか、関数のヘルプにも何も書かれていないので、よくわからない。

どこで、アカウントで、またはテスターで
 
Alexander Bereznyak:
どこで、アカウントで、またはテスターで
どちらも参考文献にない。
 

同じパラメータを持つオーバーロードされた関数の あいまいな呼び出し

class A
{
public:  
//  void func( const int ) const {} // если заменить на это - будет компилироваться
  void func( const int ) {}

//  void func( const int& ) const {} // если заменить на это - будет компилироваться
  void func( const int& ) {}
};

void OnStart()
{
  A a;

  a.func(0);  

  int i1 = 0;
  a.func(i1);  

  const int i2 = 0;
  a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters  
}

これは誤解なのかバグなのか?

 
fxsaber:

私の勘違いなのか、バグなのか。

私の理解では、このコードはどちらの場合でも同じ動作をするはずです。
 
fxsaber:

同じパラメータを持つオーバーロードされた関数のあいまいな呼び出し

これは誤解なのかバグなのか?

誤解がある。

まあ、それはそれとして、答え合わせをしました。))))

 
Комбинатор:
私の理解では、このコードはどちらの場合でも同じ動作をするはずです。

私もそう思っています。

セルゲイ・ウラジミロフ

誤解がある。

まあ、それはそれとして、答えました。))))

あのくだらないソースコードの例は、作るのに時間がかかりましたね。作っているうちにユーモアのセンスがなくなりそうでした。

 
fxsaber:

このダムソースの例では、作成に時間がかかりました。作っているうちにユーモアのセンスがなくなりそうでした。

(苦笑) わかりました。)

3つの呼び出しのバージョンすべてにおいて、引数が値で渡されるのか参照で渡されるのか理解できないため、コンパイラはどの関数を呼び出すか選択できない。また、const修飾子はそれらをオーバーロードします。void f(){}とvoid f() const {}は異なる関数です。この例では、メソッドの1つをconstとして宣言した場合、不確実性はなくなります。コンパイラは、呼び出しが定数オブジェクトから行われたかどうかによって、目的のメソッドを選択します(この例では引数の型は重要ではありません)。

あなたのオブジェクトaは定数ではないので、constなしのメソッドは3回とも呼ばれることになります。オブジェクトを定数宣言(A const a;)すると、定数メソッドが 呼び出されます。

どのような出力になるかをご覧ください。

class A
{
public:  
  void func() {Print("Non const");}
  void func() const {Print("Const");}
};

void OnStart()
{
        A a;
        A const b;
        
        a.func();
        b.func();
}
 
Sergei Vladimirov:

よかったです。)

この3種類の呼び出しでは、引数が値で渡されるのか参照で渡さ れるのかが分からないため、コンパイラはどの関数を呼び出すか選択することができないのです。また、const修飾子はそれらをオーバーロードします。void f(){}とvoid f() const {}は異なる関数です。この例では、メソッドの1つをconstとして宣言した場合、不確実性はなくなります。コンパイラは、呼び出しが定数オブジェクトから行われたかどうかによって、目的のメソッドを選択します(この例では引数の型は重要ではありません)。

あなたのオブジェクトaは定数ではないので、constなしのメソッドは3回とも呼ばれることになります。オブジェクトを定数として宣言した場合(A const a;)、定数メソッドが 呼び出されることになります。

最初に実行したはずです。エラーはここでONLY
const int i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

それ以前の通話はすべて問題なく通過します。

何をプリントアウトするか見てみましょう。

これは別のスレッドからです。