80
struct X
{
    X()    { std::cout << "X()\n";    }
    X(int) { std::cout << "X(int)\n"; }
};

const int answer = 42;

int main()
{
    X(answer);
}

私はこれがどちらかを印刷することを期待していました

  • X(int)、からへX(answer);のキャストとして解釈される可能性があるため、またはintX
  • X(answer);変数の宣言として解釈される可能性があるため、何もありません。

ただし、それは出力されX()、なぜX(answer);デフォルトのコンストラクターを呼び出すのかわかりません。

ボーナスポイント:変数宣言の代わりに一時的な宣言を取得するには、何を変更する必要がありますか?

4

3 に答える 3

73

X(answer);なので、何もありません。変数の宣言として解釈できます。

あなたの答えはここに隠されています。変数を宣言する場合は、デフォルトのctorを呼び出します(POD以外の場合など)。

編集時:一時的なものを取得するには、いくつかのオプションがあります。

于 2012-07-27T15:36:22.150 に答える
66

括弧はオプションです。あなたが言ったことはと同じX answer;であり、それは宣言文です。

于 2012-07-27T15:36:00.833 に答える
9

タイプXの変数を宣言する場合は、次のようにする必要があります。

X y(answer);
于 2012-07-27T15:39:42.100 に答える