如果你只关心C,你真的不需要问C++,但在你的例子中,C++和C仍然做大部分相同的事情;
C++谈到了这些完整的转换:
如果目标类型已签名,则如果可以在目标类型(和位字段宽度)中表示该值,则该值不会更改; 否则,该值是实现定义的.
C99说这些积分转换:
否则,新类型将被签名,并且值无法在其中表示; 结果是实现定义的,或者引发实现定义的信号.
如果可能,将较大的整数值转换为较小的有符号整数值将产生相同的值,否则将给出实现定义(即,非可移植)行为.
§5.4/ 4州
由...执行的转换
- 一个const_cast(5.2.11),
- 一个static_cast(5.2.9),
- static_cast后跟const_cast,
- reinterpret_cast(5.2.10),或
- 一个reinterpret_cast后跟一个const_cast,
可以使用显式类型转换的强制转换表示法执行.
[...]
如果转换可以用上面列出的多种方式解释,则使用列表中首先出现的解释,即使由该解释产生的转换是格式错误的.
定义C++使其与C兼容; 也就是说,C casts在C++中会像在C中那样做同样的事情.这意味着C语言中的强制转换符号确实会根据之间的类型执行不同的操作.