explicit 关键字_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > explicit 关键字

explicit 关键字

 2011/12/28 17:56:21  qianjigui  http://qianjigui.iteye.com  我要评论(0)
  • 摘要:explicit,和构造函数一起使用.explicitconstructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.举个例子:有这样一段代码:classA{public:A(int);private:intnum;};intTest(constA&)//一个应用函数{...}Test(2);//正确过程是这样的:编译器知道传的值是int而函数需要的是A类型,但它也同时知道调用A的构造函数将int转换成一个合适的A,所以才有上面成功的调用.换句话说
  • 标签:关键字

explicit,和构造函数一起使用.
explicit ? constructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.
举个例子:
? ? 有这样一段代码:

class ? A
{
? ? ? public:
? ? ? ? ? A(int);
? ? ? private:
? ? ? ? ? int ? num;
};

int ? Test(const ? A&) ? // ? 一个应用函数
{
? ? ? ...
}

Test(2); ? // ? 正确
过程是这样的: ? 编译器知道传的值是int而函数需要的是A类型,但它也同时知道调用A的构造函数将int转换成一个合适的A,所以才有上面成功的调用.换句话说,编译器处理这个调用时的情形类似下面这样:
? ? const ? A ? temp(2); ? ? ? ? ? ? // ? 从2产生一个临时A对象
? ? Test(temp); ? ? ? ? ? // ? 调用函数


如果代码写成如下样子:
class ? A
{
? ? ? public:
? ? ? ? explicit ? A(int);
? ? ? private:
? ? ? ? ? int ? num;
};

int ? Test(const ? A&) ? // ? 一个应用函数
{
? ? ? ...
}

Test(2); ? // ? 失败,不能通过隐式类型转换将int类型变量构造成成A类型变量

发表评论
用户名: 匿名