Cの使用++明示的なキーワード

:最初は定義され
明示的なキーワードは一つだけのパラメータ変更することができますコンストラクタを、またはパラメータの数がありますが、最初の引数に加えて、他のパラメータは、デフォルトコンストラクタの値を持っています。その役割は、コンストラクタを明示的に示されていることを示すことです。(クラスのコンストラクタの暗黙のデフォルト)

クラスのコンストラクタのパラメータが2以上である場合には、暗黙の型変換が発生していない、それはまた、無効なキーワード明示的です

例えば:

class AMD{
public:
    AMD(int level){  //这里的构造函数默认就是隐式声明
        .....
        }
.....
}

この場合は、次の文を実行する場合:

AMD a(3);
AMD b=10;

これら二つは問題ありません、第二の文AMD B = 10;問題の理由はないです:
C ++、コンストラクタ唯一の引数は、コンパイル時にデフォルトの変換動作があるだろうとします。コンストラクタは、対応するデータ・タイプは、クラスオブジェクトに変換される。
すなわち、実際の実装の次の文の操作と同等のAMD B = 10:

AMD b(10);
//或者
AMD c(10);
AMD b = c;

しかし、このようなアプローチによる説明はまだ、非友好的なすべての後ですが、AMDは、B = 10、それはオブジェクトに割り当てられた整数のような文言ルックスもない魚も鳥ですが、複雑なコードで簡単に混乱を感じるように - >今、私たちは、明示的なキーワードを使用しようとしています

明示的な変更後:

class AMD{
public:
    explicit AMD(int level){  //修饰后构造函数就是显式声明
        .....
        }
.....
}

この場合、2つの文が実行される前に行くこと、
AMD A(3)、依然として問題はないが、AMD B = 10がもはや可能(明示的に防止暗黙自動変換クラスのコンストラクタ)である
Cの使用++明示的なキーワード
(場合は、コンパイルエラー)が発生しました

明示的なキーワードの定義に従って、あなたは、コンストラクタを(一つだけにデフォルト値がないいる)パラメータの数を変更できます。

class AMD{
public:
    explicit AMD(int level,int size=0....){  //除了第一个参数都有缺省值
        .....
        }
.....
}

この場合、キーワード等AMD B = 10を使用して明示的な機能は依然として与えられる暗黙的型変換文を生成することになるです。

予想外の明示的な型変換コンストラクタ回避で変性していない、と何の不利益なので、通常の状況下で、または明示的なの使用を奨励するため、

おすすめ

転載: blog.51cto.com/14232799/2483022