您的位置:首页 > 其它

explicit 显示转换 (不允许隐式转换)

2017-03-17 14:05 288 查看
explicit   只对构造函数起作用,用来抑制隐式转换。
class Test1
{
public:
Test1(int n) { num = n; } //普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n) { num = n; } //explicit(显式)构造函数
private:
int num;
};

int main()
{
Test1 t1 = 12; //隐式调用其构造函数, 成功 自动将12转换为该类对象
//     如果c++类的其中一个构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:
//     将该构造函数对应数据类型的数据转换为该类对象。
Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
Test2 t3(12); //显示调用成功
return 0;
}
Test1的构造函数带一个int型的参数,代码t1 = 12会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),
这表示不能通过隐式转换来调用这个构造函数,因此t2 = 12会出现编译错误。
普通构造函数能够被隐式调用。而explicit构造函数只能被显示调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: