C++キーワードexplicit

1913 ワード

   explicit,                            。   explicit               。
  C++ ,          (                          ),        。 1       2                。
    ,           AAA = XXX,      ,    XXX      AAA           ,                 ,     AAA   。
           ,    。        (        ),       (   )   。                explicit  ,                ,  ,                  。   ,             。
  explicit       
    :
  explicit              。       :
  class Test1
  {
  public:
  Test1(int n) { num = n; } //      
  private:
  int num;
  };
  class Test2
  {
  public:
  explicit Test2(int n) { num = n; } //explicit(  )    
  private:
  int num;
  };
  int main()
  {
  Test1 t1 = 12; //         ,   
  Test2 t2 = 12; //    ,           
  Test2 t3(12); //      
  return 0;
  }
  Test1        int    ,  19         Test1       。 Test2         explicit(  ),                    ,    20        。
               。 explicit           。



MSDNには、コンストラクション関数パラメータが2つを超えると自動的に暗黙的な変換がキャンセルされるという事実が記述されている.たとえば
class gxgExplicit
{
private:
   int _size;
   int _age;
public:
   explicit gxgExplicit(int age, int size)
   {
      _age = age;
      _size = size;
   }
};
これはキーワードの効果があるかどうかと同じです.それはこのキーワードがあることに相当します.
ただし、別の場合は例外です.入力する必要があるパラメータは1つしかありません.残りはデフォルト値のあるパラメータです.
class gxgExplicit
{
private:
   int _size;
   int _age;
public:
   explicit gxgExplicit(int age, int size = 0)
   {
      _age = age;
      _size = size;
   }
};
class gxgExplicit
{
private:
   int _size;
   int _age;
int _hight;
public:
   explicit gxgExplicit(int age, int size = 0)
   {
      _age = age;
      _size = size;
      _hight = hight;
   }
};
 
この場合は1つのパラメータの効果に相当します.
今まで.このキーワードはこのように使われています.