对隐式转换保持警觉

来源:互联网 发布:为知笔记导出epub 编辑:程序博客网 时间:2024/05/16 09:40

C++自动对内置类型自动进行隐式转换。如int->double,double->char等。对于自己提供的数据类型可以具备更多对隐式转换的控制力。

对于自定义类型C++使用以下两种方式隐式转换:

一 单一参数的构造函数,包括多参数除第一个外全部为默认参数的情况。

class C{public:    C(int);    C(int, int a = 1);}

处理方式

  • 添加explicit,禁用隐式转换
class C{public:    explicit C(int);    explicit C(int, int a = 1);}
  • 使用proxy class ,防止隐式转换
class IntProxy{public:    IntProxy(int num);    int num(){return num;}private:    int num;};class C{public:    C(IntProxy);    C(IntProxy, IntProxy a = 1);};

二 隐式类型转换操作符。

class C{public:    C();    operator bool ();    operator double();}

处理方式

添加显示转换的方式,如std::string提供了c_str()来获取C格式的字符串。

class C{public:    C();    bool asbool();    double asdouble();}

三 总结

允许编译器执行隐式类型转坏处大于好处,非必要不提供隐式转换。

原创粉丝点击