[解決済み] なぜデフォルトのコンストラクタを呼び出すのですか?
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やその他のものでない場合)。
編集について:一時的なものを得るために、いくつかのオプションがあります。
関連
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Pythonの "at"(@)マークは何をするものですか?
-
[解決済み] 関数呼び出しにおけるstarとdoublestarの演算子の意味は?
-
[解決済み] なぜC++では変数を宣言するときに変数名を括弧で囲むことができるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】coutはstdのメンバではない
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない