21.C++- ++操作符重载、隐式转换之explicit关键字、类的类型转换函数

2021-06-23 12:06

阅读:316

标签:xpl   等价   bug   不同   logs   分享   临时   类型转换   结果   

++操作符重载

  • ++操作符分为前置++后置++,比如: ++a;  a++;
  • ++操作符可以进行全局函数成员函数重载
  • 重载前置++操作符不需要参数
  • 重载后置++操作符需要一个int类型的占位参数
  • 前置++操作符的返回值为*this
  • 后置++操作符的返回值为临时对象

例如:

 

 

转换规则如下所示:

 技术分享图片

比如:

 

隐式转换的隐患

隐式转换有时会因为类型不同,得到的结果大有不同,也是常见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


评论


亲,登录后才可以留言!