标准转换
也就是编译器里内置的一些类型转换规则,比如数组退化成指针,函数转换成函数指针,特定语境下要求的转换(if里要求bool类型的值),整数类型提升,数值转换,数据类型指针到void指针的转换,nullptr_t到数据类型指针的转换,左值转换为右值的转换等。
底层const和volatie也可以被转换,只不过只能添加不能减少,可以把T*转换成const T*,但反过来是不可以的。
这些转换基本都是针对标量类型和数组这种内置的聚合类型的。
如果想要指定自定义类型的转换规则,则需要编写用户自定义类型转换的接口了。
用户自定义转换
用户能控制的自定义转换接口一共也就两个,转换构造函数和用户定义转换函数。
转换构造函数就是只类似T(T2)这样的构造函数,它拥有一个显式的T2类型的参数,通过这个构造函数可以实现从T2转换类型至T1的效果。
用户定义转换函数是类似operator T2()这样的类方法,注意不需要指定返回值。通过它可以实现从T1转换到T2。可转换的类型包括自身T1(还可附加cv限定符,或者引用)、T1的基类(或引用)以及void。
隐式转换序列
了解完标准内置的转换规则和用户自定义的转换规则,我们该看看隐式转换的工作机制了。
对于需要进行隐式转换的上下文,编译器会生成一个隐式转换序列:
- 零个或一个由标准转换规则组成的标准转换序列,叫做初始标准转换序列
- 零个或一个由用户自定义的转换规则构成的用户定义转换序列
- 零个或一个由标准转换规则组成的标准转换序列,叫做第二标准转换序列
对于隐式转换发生在构造函数的参数上时,第二标准转换序列不存在。
 
C++默认初始化,直接初始化,复制初始化,隐式转换:等您坐沙发呢!