首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

显式与隐式构造函数调用的区别,该怎么处理

2012-02-29 
显式与隐式构造函数调用的区别看C++primer看晕了,为什么要分显式和隐式啊?这两者在具体的调用中,都有些什

显式与隐式构造函数调用的区别
看C++   primer看晕了,为什么要分显式和隐式啊?这两者在具体的调用中,都有些什么区别?

[解决办法]
explicit 声明显式的意义,
主要就是防止 非预期 的构造类型转换过程的发生 ~
[解决办法]
explicit加在构造函数的前面之后,构造函数就不能被隐式的调用,否则可以隐式的被调用,举个例子楼主就懂了

class A
{
public:
A(){};
A(int x);
A operator+(const A& a);
private:
int data;
}
A::A(int x)
{
data=x;
}
A A::operator+(const A& a);
{
A a;
a=this-> data+a.data;
return a;
}
int main()
{
A a(3);
A b(5);
A c;
c=a+b; //调用了operator+,可以正确的运行
c=a+7; //因为operator+要求的是两个A类型的形参,所以7会自动的被A(int x)转换为一个A的对象,然后再与a相加,而你如果在A(int x)这个构造函数前加了explicit,则这个7到a的转换不会执行,c=a+7会报错
}

热点排行