この場合、必要ですかexplicit
:
class A
{
explicit A(B* b);
};
コンストラクタを としてマークしなくても、次のようexplicit
に書くとコンパイル エラーになると思います。
A a = new B();
ポインターからオブジェクトへの暗黙的な変換は、コンストラクターを介してまったく不可能ですよね?
この場合、必要ですかexplicit
:
class A
{
explicit A(B* b);
};
コンストラクタを としてマークしなくても、次のようexplicit
に書くとコンパイル エラーになると思います。
A a = new B();
ポインターからオブジェクトへの暗黙的な変換は、コンストラクターを介してまったく不可能ですよね?
コンパイルに失敗します から への変換に失敗しB*
ますA
。
これは、明示的に防止するのとまったく同じ種類のものです。
この場合、単に書く必要がありA a( new B() );
ます。または、本当に冗長になりたい場合は、次のように書くことができますA a = A( new B() );
根本的な質問については、それが必要かどうかはあなたとあなたのチーム次第です。一般的に主な質問は、「int」コンストラクターを使用する予定があるか ( * 型とのあいまいさにつながる)、何をしたいのか、構築引数から暗黙的な変換を行うかどうかです。
そのコンストラクターを暗黙的な変換に使用したくない場合は、が必要です。explicit
ポインターを受け入れるコンストラクターベースの暗黙的な変換を行うことは完全に可能です。