21

重複の可能性:
空の括弧のセットを使用して引数なしでコンストラクターを呼び出すとエラーになるのはなぜですか?

この質問への答えでは、それは言われています

intは、int()で初期化したかのように、デフォルトで0として構成されます。他のプリミティブ型も同様に初期化されます(たとえば、double()、long()、bool()など)。

これを同僚に説明しているときに、次のコードを作成し、コンパイル(gcc-4.3.4)して実行し、予期しない動作を観察しました。

#include <iostream>

int main() {
  int i(); 
  std::cout << i << std::endl; // output is 1
}

なぜ出力1であり、そうではないの0ですか?

4

1 に答える 1

36

ここでは、ほとんどの厄介な解析が機能します。実際には、変数iではなく関数を宣言しています。intコンパイルすらすべきではありません(実際にiどこかに関数が定義されていない限り...そうですか?)。

intの値を初期化するには、次のものが必要です。

int i = int(); 
于 2012-06-20T10:20:38.483 に答える