「int i = i;」が合法なのはなぜですか? [重複] 質問する

「int i = i;」が合法なのはなぜですか? [重複] 質問する

重複の可能性あり:
int var = 1; void main() { int i = i; }

次のコードは、g++ と Visual C++ の両方でコンパイルに合格します。なぜこれが合法なのでしょうか? 不合理に見え、隠れたバグを引き起こす可能性があります。

int main() {
  int i = i;
}

ベストアンサー1

編集:その文法的に正しいただし、 を使用すると未定義の動作が発生しますx

そのない初期化されていない変数に別の (同じ) 初期化されていない変数を割り当てているため、合法です。コンパイルできるからといって合法であるとは限りません。確かに有効な C++ 構文ですが、合法ではありません。

代入演算子の右側は、代入時に完全に評価される必要があります。この場合、それは でありi、初期化されていません。

この引用文を発掘した Steve Jessop 氏に感謝します。

4.1/1、左辺値から右辺値への変換

[...] オブジェクトが初期化されていない場合、この変換を必要とするプログラムの動作は未定義になります。

おすすめ記事