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。鼓励你遵循相同的政策。