哪个C++强制类型是C强制等效的

Pab*_*run 3 c c++ types casting

我猜C只是一个重新解释,并且位模式保持原样.

我试图理解当我将更宽的有符号值转换为更窄的有符号值时会发生什么.是保留符号,还是简单地将较窄宽度中的值解释为带符号值.

谢谢你的帮助.

编辑 - 这是针对C99编译的c代码.问题不在于c ++编译器将使用粗糙的旧样式转换,而是如果有什么定义C的作用.

bam*_*s53 6

如果你只关心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语言中的强制转换符号确实会根据之间的类型执行不同的操作.