質問
基底クラスのコンストラクタの複数回の呼び出しは、未定義の動作ですか?
それとも、何らかの定義された動作になりますか?
コード
C++
1struct base { 2 base(std::string str) : m_str(str) {} 3 4private: 5 std::string m_str; 6}; 7 8struct child: base { 9 child() : base("first") { 10 // base は既に初期化済みだが、再び呼び出す 11 // 修正前: base("second"); 12 // 修正後 13 this->base::base("second"); 14 } 15};
これをやりたい理由
child のコンストラクタ内で複雑な文字列を作成して、それを base に渡す必要があるため、一旦 base を空文字列で初期化した後、複雑な文字列を作成して、その後再度 base 部分をその文字列で初期化し直したいと考えています。
追記
申し訳ありません。
コードが一部、質問したい内容と異なっていました。
修正後のコードでご回答願いたいです。よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/09 04:59 編集
2021/10/09 04:54
2021/10/09 05:06
2021/10/09 05:43
2021/10/09 06:34