转自http://blog.csdn.net/libaineu2004/article/details/19491579ios
关键字 explicit 能够禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止没必要要的隐式转化.函数
关键字 explicit 能够禁止“单参数构造函数”被用于自动类型转换。光看这一句彷佛不太容易明白,下面,举个简单地例子。ui
//main.cpp
#include <iostream>spa
using namespace std;.net
class Test
{
public:
Test(int a)
{
m_data = a;
}对象
void show()
{
cout << "m_data = " << m_data << endl;
}blog
private:
int m_data;
};ci
void main(void)
{
Test t = 2; // 将一个常量赋给了一个对象
t.show();
}编译器
编译可以经过,执行结果:m_data = 2。it
为何会这样呢?原来C++经过隐式转换,构造了一个临时对象Test(2),将它赋给了t(这里调用了默认的构造函数,而不是重载的“=”,由于这是在对象建立的时候)。那么,若是给构造函数加上关键字 explicit ,构造函数变成了 explicit Test(int a),再次编译,编译器就会报错。这时,就只能显式地使用构造函数了Test t = Test(2) 。
看过这段,仍是不太理解explicit,因而又找到这样一篇文章http://blog.csdn.net/guodongxiaren/article/details/24455653?utm_source=tuicool&utm_medium=referral CSDN上的一个牛人所写,看过之后,会理解的更透彻。