C++のキーワードexplicit

2644 ワード

 C++          explicit   ,    ,               。  C++     ,             C++     。              MFC   C++           explicit         。  explicit                         ,                  。  C++        ,                 。 
     ,                      。    : 
(    CExample         ,         ) 
//Example.h 
#pragma once class CExample 
{ 
public: 
CExample(void); 
public: 
~CExample(void); 
­
public: 
int m_iFirst; 
int m_iSecond; 
public: 
CExample(int iFirst, int iSecond = 4); 
}; 
//Example.cpp 
#include "StdAfx.h" 
#include "Example.h" 
CExample::CExample(void) 
: m_iFirst(0) 
{ 
} 
CExample::~CExample(void) 
{ 
} 
CExample::CExample(int iFirst, int iSecond):m_iFirst(iFirst), m_iSecond(iSecond) 
{ 
} 
//TestExplicitKey.cpp 
...//      
#include "Example.h" 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
CExample objOne; //            
CExample objTwo(12, 12); //             
CExample objThree(12); //  ,                          
CExample objFour = 12; //       ,   CExample temp(12);objFour(temp);          
//                  
return 0; 
} 
               explicit,   
explicit CExample(int iFirst, int iSecond = 4); 
  CExample objFour = 12;            。 vs05           
error C2440: 'initializing' : cannot convert from 'int' to 'CExample' 
        Constructor for class 'CExample' is declared 'explicit' 
      ,        。        ,           (      ,       )。                     ,      ,                。          explicit(  )           。    ,explicit          。 
    Bjarne Stroustrup   : 
class String{ 
      explicit String(int n); 
      String(const char *p); 
}; 
String s1 = 'a'; //  :     char->String   
String s2(10);   //  :  explicit String(int n); 
String s3 = String(10);//  :  explicit String(int n);             
String s4 = "Brian"; //  :      String(const char *p);             
String s5("Fawlty"); //  :    String(const char *p); 
void f(String); 
­
String g() 
{ 
    f(10); //  :     int->String   
    f("Arthur"); //  :    ,   f(String("Arthur")); 
    return 10; //   
} 
                     。 
      ,      ,               ,                。 
               explicit   ,                 explicit,             。