C++中的Explicit关键字
作者:PhiliAI 发布时间:[ 2016/8/18 10:50:16 ] 推荐标签:关键字 C++
引用一下Bjarne Stroustrup的例子:
1classString{
2explicitString(intn);
3String(constchar*p);
4};
5Strings1='a';//错误:不能做隐式char->String转换
6Strings2(10);//可以:调用explicitString(intn);
7Strings3=String(10);//可以:调用explicitString(intn);再调用默认的复制构造函数
8Strings4="Brian";//可以:隐式转换调用String(constchar*p);再调用默认的复制构造函数
9Strings5("Fawlty");//可以:正常调用String(constchar*p);
10voidf(String);
11Stringg()
12{
13f(10);//错误:不能做隐式int->String转换
14f("Arthur");//可以:隐式转换,等价于f(String("Arthur"));
15return10;//同上
16}
发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。
要注意的是,不仅仅是只有一个参数的构造函数可以用explicit,如果一个构造函数带默认实参,并且非默认实参是只有一个,那么应该也给他分配为explicit。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南