explicit和implicit

explicit是C++中的一个关键字,只用于修饰只有一个参数的构造函数:

class A{
    explicit A(const T obj); 
};

该关键字告诉编译器该类只能显式的转换,不能隐式(implicit)的赋值。下面介绍一下显式转换和隐式转换的区别:

1 A a=b;//隐式的调用构造函数
2 A a(b);//显式的调用构造函数

google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。所以以后想项目中我决定只有单个传参的构造函数都用explicit修饰,以避免不必要的麻烦。

posted @ 2018-01-31 17:51  guhowo  阅读(462)  评论(0编辑  收藏  举报