C++ explicit关键字
来源:互联网 发布:淘宝上同款价格差好多 编辑:程序博客网 时间:2024/05/21 22:28
C++中的explicit关键字可以防止单参数构造函数的隐式类型转换。
引用一下Bjarne Stroustrup的例子:
class String
{
explicit String(int n);
String(const char *p);
};
String s1 = 'a'; //错误:不能做隐式char->String转换
String s2(10); //可以:调用explicit String(int n);
String s3 = String(10);//可以:调用explicit String(int n);再调用默认的复制构造函数
String s4 = "Brian"; //可以:隐式转换调用String(const char *p);再调用默认的复制构造函数
String s5("Fawlty"); //可以:正常调用String(const char *p);
void f(String);
String g()
{
f(10); //错误:不能做隐式int->String转换
f("Arthur"); //可以:隐式转换,等价于f(String("Arthur"));
return 10; //错误:不能做隐式int->String转换
}
google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。所以google约定所有单参数的构造函数都必须是显示的,只有极少数情况下拷贝构造函数可以不声明称explicit。例如作为其他类的透明包装器的类。
effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit。我鼓励你遵循相同的政策。
0 0
- C++:explicit 关键字
- C++explicit关键字
- 【C++】explicit关键字
- C++explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- C++——explicit关键字简析
- extern “C”总结 C++中的explicit关键字
- C++—volatile、explicit、mutable关键字
- explicit 关键字
- Explicit 关键字
- Explicit 关键字
- explicit关键字
- 关键字explicit
- explicit关键字
- explicit关键字
- explicit关键字
- PageRank的Java代码实现及图形操作(带详细注释)!
- Uva 400 Unix ls
- poj 1007 DNA Sorting
- 黑马程序员-泛型基础
- DLNA介绍
- C++ explicit关键字
- MyBatis中Association联合select使用
- 现在哪个浏览器最好用
- HDU 4862 Jump 二分图最佳匹配KM算法
- SAS Macro 日期格式转换
- 过滤Filterable
- Qt在各平台上的搭建qt-everywhere
- 多线程之线程的中止
- android button按键按下和抬起 长按一直发送