6.5.5 强制转换运算符
- 强制转换表达式的形式是:
c
(type-name) cast-expression1
除非目标类型是
void,否则目标类型必须是原子的、限定的或无限定的标量类型,操作数也必须是标量类型。涉及指针的类型转换,除
6.5.17.2明确允许的赋值情形外,应通过显式强制转换来写出。指针类型不得转换为任何浮点类型;浮点类型也不得转换为任何指针类型。
nullptr_t只能转换为:voidbool- 指针类型
如果目标类型是
nullptr_t,则被转换的表达式必须是空指针常量,或者本身就具有nullptr_t类型。把一个表达式前置一个带括号的类型名,就是把该表达式的值转换为该类型的去限定、非原子版本。这就叫强制转换。
若强制转换实际上并未改变类型和值,则它不会产生额外效果;但这并不意味着它是左值。标准明确规定:强制转换结果不是左值。
如果原表达式值是以比目标类型要求更大的范围或精度表示的,那么即使“表面类型一样”,这个强制转换仍然有意义,因为它会去掉额外范围和精度。
IMPORTANT
强制转换不是“类型注释”。它会真的触发 6.3 中对应的转换规则;而且转换结果不是左值。