`
weihe6666
  • 浏览: 430366 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关键词explicit

    博客分类:
  • C++
阅读更多
关键词explicit[size=large][/size][align=center][/align]

项目中经常看到关键词explicit,MSDN上的解释为:为了防止隐式使用拷贝构造函数的,就是限制编辑器私自使用默认的转换。

例子如下:
class A{
public:
	//explicit
	 A(int i) : m_i(i){
		cout << "Call A(int i)" << endl;
	}
	A(const A &temp){
      this->m_i = temp.m_i;
	  cout << "Call Copy Constructor" << endl;
	}
	A & operator = (const A &temp){
		m_i = temp.m_i;
		cout << "Call Assignment" << endl;
		return *this;
	}
	~A(){
		cout << "Call Destructor Fun" << endl;
	}
private:
	int m_i;
};
int main(){
	A a = 0 ;
	A b = a;
	a = 10; // 这里是什么操作?
	return 0;
}


输出结果:
Call A(int i)
Call Copy Constructor
Call A(int i)
Call Assignment
Call Destructor Fun
Call Destructor Fun
Call Destructor Fun

注意上面是调用两次构造函数,也就是A a=0,并没有产生临时变量,并不等效于:tem(0); a = tem;

若构造函数前加上explicit,情况会如下:
error C2440: 'initializing' : cannot convert from 'int' to 'A',不可以隐士的转换。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics