现在的位置: 首页 > 综合 > 正文

被忽略的 explicit 关键字

2018年02月20日 ⁄ 综合 ⁄ 共 309字 ⁄ 字号 评论关闭

所有单参数的构造函数都必须是explicit的,这是为了防止后台悄悄进行的类型转换,举个例子如下:

定义一个类:

class IntCell
{
public:
   explicit IntCell(int intvalue=0):IntValue(intvalue){}
private:
 int IntValue;
};

 

对类做如下实例化:

IntCell obj;
obj=37;

 

如果不加上explicit关键字的话,这将顺利通过编译,原因是c++通过隐式类型转换,构造了一个临时对象,临时对象的IntValue值是37,

然后再把这个临时对象赋给obj;

如果加上explicit 那么这种情况编译器就匹配不了=两边的类型了 ,就会编译不通过。

抱歉!评论已关闭.