您的位置:首页 > 其它

MOOC清华《面向对象程序设计》第4章:delete禁止自动类型转换实验

2017-08-26 20:18 253 查看
#include <iostream>
using namespace std;

class T{
public:
T(int){}
//若无下条语句,则main函数中所有语句均可编译通过
T(char) = delete;//可消除自动转换带来的隐患
};

void Func(T t){}

int main(){
Func(1);
//Func('x');//自动类型转换失败(char->int),编译不通过
T ci(1);
//T cc('X');//自动类型转换失败,编译不通过
return 0;
}




若没有定义T(char),则main函数中的所有语句依然可以编译通过,可能是因为C++编译器含有默认的自动类型转换;

而T(char) = delete 后,就彻底禁止了这种自动类型转换。

语言是承载信息的,语句也是承载信息的,语言和语句都是有着某种“魔力”的,就像“咒语”一样。计算机语言可以命令计算机做某事,或者不做某事,就像这条 = delete 语句,做到真正的“令行禁止”。自然语言也有类似的力量,只是计算机语言驱动的是软件、硬件,自然语言驱动的是“人件”。

= delete可以删除自定义类的成员函数,也可以删除非类成员的普通函数,禁止某些类型的自动转换。原理与上类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐