c++ explicit

来源:互联网 发布:js请求servlet 编辑:程序博客网 时间:2024/06/08 04:54

explicit 的作用?

针对1个参数的,构造函数,存在隐式数据类型转换的可能;为了避免这种转化,构造函数内部使用explicit进行限定,不允许单参数的隐式类型转换;

class Test {public:    Test(int n):num(n){}private:    int num;}Test val = 10;//实际进行隐式类型转换:Test tmp(10) -> val

不想发生此转换,使用explicit吧!

explicit 的使用建议?

google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。所以google约定所有单参数的构造函数都必须是显示的,只有极少数情况下拷贝构造函数可以不声明称explicit。例如作为其他类的透明包装器的类。

effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit。鼓励你遵循相同的政策。

0 0
原创粉丝点击