1. ホーム
  2. c++

c++で初期化する前にオブジェクトを宣言する

2023-10-21 10:05:42

質問

c++でインスタンス化せずに変数を宣言することは可能でしょうか?このようなことをしたいのですが。

Animal a;
if( happyDay() ) 
    a( "puppies" ); //constructor call
else
    a( "toads" );

基本的には、条件分岐の外側を宣言して、正しいスコープを取得するようにしたいだけです。

ポインタを使用せずに、これを実行する方法はありますか? a をヒープに割り当てることなく、これを行う方法はありますか?多分、参照で何か賢い方法があるのでしょうか?

どのように解決する?

C++では、デフォルトのコンストラクタで定義した時点でオブジェクトが構築されるため、直接行うことはできません。

しかし、パラメータ化されたコンストラクタを最初に実行することは可能です。

Animal a(getAppropriateString());

のようなものを実際に使用することもできます。 ?: operator のようなものを使って、正しい文字列を決定することもできます。 (Update: @Greg がこのための構文を教えてくれました。 その回答を参照してください)