12 c++ integer type-conversion undefined-behavior c++11
#include <cstdint>
#include <iostream>
int main() {
uint32_t i = -64;
int32_t j = i;
std::cout << j;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的大多数编译器都会创建输出的程序-64,但是这个定义的行为是什么?
uint32_t i = -64;定义了行为?int32_t j = i;,当i等于时4294967232,是否定义了行为?对于无符号整数超出范围的转换,定义结果; 对于有符号整数,它是实现定义的.
C++ 11(ISO/IEC 14882:2011)§4.7完整转换[conv.integral/2]
如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2 ^ n,其中n是用于表示无符号类型的位数).[注意:在二进制补码表示中,此转换是概念性的,并且位模式没有变化(如果没有截断). - 尾注]
如果目标类型已签名,则如果可以在目标类型(和位字段宽度)中表示该值,则该值不会更改; 否则,该值是实现定义的.
对于C++ 14,此文本保持不变.
| 归档时间: |
|
| 查看次数: |
3066 次 |
| 最近记录: |