C++エッセイのexplicitキーワード

5984 ワード

C++エッセイのexplicitキーワード(転載)
explicitキーワードは、コンストラクション関数の暗黙的な変換を取り消すために使用され、複数のパラメータを持つコンストラクション関数にexplicitを使用するのは構文エラーです.
In C++ it is possible to declare constructors for a class, taking a single parameter, and use those constructors for doing type conversion. For example:

				
   
   
   
   
class  A {
public :
        A(
int );
};

void  f(A) {}
void  g()
{
         A a1 
=   37 ;
         A a2 
=  A( 47 );
         A a3(
57 );
         a1 
=   67 ;
         f(
77 );
}

A declaration like:
 A a1 = 37;
says to call the A(int) constructor to create an A object from the integer value. Such a constructor is called a "converting constructor".

However, this type of implicit conversion can be confusing, and there is a way of disabling it, using a new keyword "explicit"in the constructor declaration:

				
   
   
   
   
class  A {
public :
       
explicit  A( int );
};

void  f(A) {}
void  g()
{
          A a1 
=   37 ;       //  illegal
          A a2  =  A( 47 );    //  OK
          A a3( 57 );        //  OK
          a1  =   67 ;         //  illegal
          f( 77 );           //  illegal
}


Using the explicit keyword, a constructor is declared to be
"nonconverting", and explicit constructor syntax is required:

				
   
   
   
   
class  A {
public :
        
explicit  A( int );
        };

void  f(A) {}

void  g()
{
        A a1 
=  A( 37 );
        A a2 
=  A( 47 );
        A a3(
57 );
        a1 
=  A( 67 );
        f(A(
77 ));
}



Note that an expression such as:

				        A(47)

is closely related to function-style casts supported by C++. For example:

				        double d = 12.34;

int i = int(d);