之前在项目中有看到过explicit关键字,不过不清楚是什么作用。
网上大致查了一下。
首先它仅限于描述构造函数,然后它的作用是避免隐式调用构造函数。
什么时候会触发隐式调用呢?
举个栗子:
//测试类Test
class Test
{
public:
Test()
{
m_iValueA = 0;
m_iValueB = 0;
}
explicit Test(int iA,int iB = 4)
{
m_iValueA = iA;
m_iValueB = iB;
}
int m_iValueA;
int m_iValueB;
};
int main()
{
Test testTemp1(5);
Test testTemp2 = 5;
}
这里的Test testTemp2 = 5;就是在隐式调用Test(int iA,int iB = 4)这个构造函数,而因为声明了explicit关键字,所以它的编译时无法通过的。
它的作用在于禁止一些我们未察觉到的隐式调用,避免程序中意料之外的情况发生。
(代码借鉴于http://blog.youkuaiyun.com/chollima/article/details/3486230)