1. ホーム
  2. c++

[解決済み] なぜデフォルトのコンストラクタを呼び出すのですか?

2023-07-03 05:25:27

質問

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); からのキャストと解釈される可能性があるからです。 int から X または
  • 全くない、なぜなら X(answer); は変数の宣言と解釈される可能性があるからです。

しかし と表示されます。 X() と表示され、なぜ X(answer); がデフォルトのコンストラクタを呼び出す理由がわかりません。

ボーナスポイント 変数宣言の代わりにテンポラリを取得するためには、何を変更しなければならないでしょうか。

どのように解決するのですか?

X(answer);は変数の宣言と解釈される可能性があるため、全く何もしません。

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

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