C++笔记 explicit构造函数

来源:互联网 发布:淘宝优惠券内容怎么写 编辑:程序博客网 时间:2024/05/18 09:39

如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象

  1. class MyClass  
  2. {  
  3. public:  
  4. MyClass( int num );  
  5. }   
  6. MyClass object = 10; //ok,convert int to MyClass   
  7. 在上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:
  1. MyClass temp(10);  
  2. MyClass object = temp
上面的所有的C++ explicit关键字相关的操作即是所谓的"隐式转换"。

如果要避免这种自动转换的功能,将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的MyClass类的构造函数为显式的,那么下面的代码就不能够编译通过了,

  1. class MyClass  
  2. {  
  3. public:  
  4. explicit MyClass( int num );  
  5. }  
  6. //.  
  7. MyClass object = 10; //err,can't non-explict convert 

使用FTP连接类对象

class CInternetSession : public CObject
{
public:
/* explicit */ CInternetSession(LPCTSTR pstrAgent = NULL,
DWORD_PTR dwContext = 1,
DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
LPCTSTR pstrProxyName = NULL,
LPCTSTR pstrProxyBypass = NULL,
DWORD dwFlags = 0);

}

CInternetSession   *m_internet_session ;

m_internet_session = new CInternetSession("");   //new 空间时对构造函数传一个参数