1

この場合、必要ですかexplicit

class A
{
    explicit A(B* b);
};

コンストラクタを としてマークしなくても、次のようexplicitに書くとコンパイル エラーになると思います。

A a = new B(); 

ポインターからオブジェクトへの暗黙的な変換は、コンストラクターを介してまったく不可能ですよね?

4

3 に答える 3

1

コンパイルに失敗します から への変換に失敗しB*ますA

これは、明示的に防止するのとまったく同じ種類のものです。

この場合、単に書く必要がありA a( new B() );ます。または、本当に冗長になりたい場合は、次のように書くことができますA a = A( new B() );

根本的な質問については、それが必要かどうかはあなたとあなたのチーム次第です。一般的に主な質問は、「int」コンストラクターを使用する予定があるか ( * 型とのあいまいさにつながる)、何をしたいのか、構築引数から暗黙的な変換を行うかどうかです。

于 2015-08-24T15:29:52.860 に答える
1

そのコンストラクターを暗黙的な変換に使用したくない場合は、が必要です。explicitポインターを受け入れるコンストラクターベースの暗黙的な変換を行うことは完全に可能です。

于 2015-08-24T15:40:05.440 に答える