您的位置:首页 > 编程语言 > C语言/C++

C++中的explicit关键字

2012-06-13 10:15 246 查看
#include <iostream>
using namespace std;

class Demo
{
private:
int value;
public:
Demo():value(0){}
Demo(int val):value(val){}
Demo(const Demo& d):value(d.value){}
};

int main()
{
Demo d = 1;
Demo dd = d;

return 0;
}

Demo d = 1会这样运行:

通过将1传递给单个形参构造函数,用这个构造函数来初始化对象d。

对于下一行代码,通过将d传递给复制构造函数,来初始化dd。

这些隐式调用都是自动完成的。有时候运行的很好,但是也有的时候会造成出乎意外的结果。

能不能防止隐式调用呢?可以的。explicit就是用作这个用途的。当在构造函数和复制构造函数前面都加上explicit时,编译就会出错,下面的写法才是正确的:

#include <iostream>
using namespace std;

class Demo
{
private:
int value;
public:
Demo():value(0){}
//explicit能防止以赋值语法带有转型操作的初始化
explicit Demo(int val):value(val){}
explicit Demo(const Demo& d):value(d.value){}
};

int main()
{
//Demo d = 1;	//构造函数加上explicit时错误
Demo d(10);
//Demo dd = d;	//赋值构造函数加上explicit时错误
Demo dd(d);

return 0;
}


转自:
http://www.programlife.net/cpp-explicit-keyword.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: