标签:xpl 等价 bug 不同 logs 分享 临时 类型转换 结果
++操作符重载
例如:
转换规则如下所示:
比如:
隐式转换的隐患
隐式转换有时会因为类型不同,得到的结果大有不同,也是常见bug之一.
参考以下示例:
运行打印:
答案并非是-1000。
同样,我们使用构造函数时,也经常使用隐式转换
参考以下示例:
运行打印:
首先编译器通过-2来找只有一个参数的构造函数,发现它的参数是unsigned int,所以便将-2隐式转换为unsigned int,从而造成结果不同.
如何解决隐式转换
在构造函数声明的时候加上explicit关键字,便能使该函数只能进行显示转换,使用方法如下:
添加后,再次编译Test t1=-2;时,就会报错了.
若添加explicit后,还想继续使用隐式转换,可以通过下面3钟方法使用隐式转换:
同样,也能支持类与类之间转换
不过类型转换函数可能会与构造函数冲突,比如:
编译出错,编译器不知道用哪个方式去初始化val对象,因为Value Val=t可以等价于:
explicit关键字.
注意:在工程中,一般都是通过 to Type()成员函数来代替类的类型转换函数,比如QT的Qstring类: 有toInt()、toDouble()等成员函数来实现类型转换
文章来源:https://www.cnblogs.com/lifexy/p/8665780.html
21.C++- ++操作符重载、隐式转换之explicit关键字、类的类型转换函数
标签:xpl 等价 bug 不同 logs 分享 临时 类型转换 结果
原文地址:https://www.cnblogs.com/xiongjim/p/9673951.html