explicitキーワードの運用

1417 ワード

 C++      explicit,                         。
C++ ,         ,      。1.     2.             。         int AAA;      XXX    , XXX     int。               ,    AAA   。
                   ,       “  bug”,     :
class TextA
{
public:
    TextA(int n){num = n;}   //    。
private:
    int num;
}

class TextB
{
public:
    explicit TextB(int n){num = n;}
private:
    int num;
}

int main()
{
    TextA t1 = 1;  //      
    TextB t2 = 1;  //      
    TextB t2(1);  //       
    return 0;
}

TextAのコンストラクション関数はint型のパラメータを持つため、TextA t 1=1である.TextAを呼び出すこのコンストラクション関数に暗黙的に変換されます.ただし、キーワードexplicitの宣言により、TextB t 2=1となる.暗黙的に変換することなく、このようにTextB t 2(1)しかできない.表示される呼び出し.