C++隐式的类类型转换和类型转换运算符
来源:互联网 发布:网络暴力调查问卷 编辑:程序博客网 时间:2024/06/13 05:27
隐式的类类型转换和类型转换运算符在一定程度上可以看做互为逆运算。
(1)隐式的类类型转换:
如果构造函数只接受一个实参,则实际上定义了转换为此类型的隐式转换机制,有时我们也称这样的构造函数为转换构造函数。这句话的意思也就是,在需要使用此类类型的地方,我们可以使用实参类型代替,但是有约束条件:只有实参类型经过一步类型转就能转换为类类型才可以替代。
不过有时着并不是我们所需的,下面是抑制隐式类类型转换的措施:
在类构造函数声明时,在函数的前面加上关键字explicit(此关键字只允许出现在类内,同virtual)。
explicit构造函数只能抑制拷贝初始化而不能抑制直接初始化。
(2)类类转化运算符型:
类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换为其他类型,格式如下:operator type()const{.......},例 operator int() const {return val};
类型转换运算符没有显式的返回类型,也没有形参。类型转换运算符可以面向任何类型(除了void),只要此类型能作为函数的返回类型。因此,我们不允许转换为数组或者函数类型,但可以转换为指针(包括数组指针及函数指针)或引用类型。
由于类型转换运算符可能产生意想不到的错误,为了防止异常情况发生,C++11新标准引进了显示的类型转换运算符,也是加关键字explicit。和显示的构造函数一样,编译器(通常)也不会将一个显示类型转换运算符用于隐式类型转换。
当类型转换运算符是显示时,我们也执类型转换,不过必须通过显示的强制类型转换才可以。
不过该规定也存在例外,即如果表达式被用作条件,则编译器将会将显示的类型转换自动应用于它。换句话说,当表达式出现在下列位置时,显示的类型转换将发生隐式的执行:
A.if,while,do的条件部分
B.for语句头的条件表达式
C. (!)(||)(&&)逻辑运算符的运算对象
D.条件语句(? :)的条件表达式。
- C++隐式的类类型转换和类型转换运算符
- C++:类型转换运算符
- c++的类型转换和运算符
- 运算符和类型转换
- C隐式类型转换与运算符优先级
- 类型转换运算符和指针运算符的重载
- 类型转换运算符
- 类型转换运算符
- 类型转换运算符
- 类型转换运算符
- 【C++】流插入、提取运算符和类型转换
- 【C++】强制类型转换运算符
- C类型转换,运算符,math.h
- 重载<<运算符,以及隐式的类型转换函数
- 【C++】强制类型转换运算符的重载
- C++:关于C++的四个类型转换运算符
- JS的类型转换,强制转换和隐式转换
- JS的类型转换,强制转换和隐式转换
- 【数据结构与算法】【查找】基本概念
- linux 内核移植和根文件系统的制作
- 网络流
- zabbix_sendmail.py
- Android-Universal-Image-Loader 图片加载库 详细分析
- C++隐式的类类型转换和类型转换运算符
- py2exe使用教程(六)——关于压缩文件
- Date()日期创建
- 织梦DedeCMS增加自定义文档属性四部曲
- jQuery中join方法
- android 根据原理分析ListView滑动checkbox状态被清除 不保存
- nodejs扩展log4js正则匹配区分文件(方案一)
- 指针和引用
- iOS UIPageControl