将超出范围的整数分配给有符号字符类型

Mas*_*son 2 c++ type-conversion

signed char a = 128;
假设一个字节是8位,这是未定义的吗?
我所知道的是,将超出范围的值分配给有符号类型是未定义的,但 Bjarne Stroustrup 在 C++ 编程语言中说,如果我将整数 255 分配给 8 位字节机器上的 char,其中 char 是有符号的结果是-1。

eer*_*ika 6

这是未定义的吗?

不。

我所知道的是,将超出范围的值分配给有符号类型是未定义的

也没有。

控制这一点的规则是整数类型之间的转换。转换是为了初始化还是赋值并不重要。

当将整数值转换为有符号整数类型时,如果结果不可表示,则:

当前标准 C++17 中:结果值将由实现定义。

在即将推出的标准 C++20中:该值将与原始值模 2 N一致,其中 N 是目标类型的宽度(就像无符号整数一样)。-1 与 255 模 2 8全等。


请注意,与转换不同,有符号算术溢出的行为是未定义的。

  • @Mason,这看起来像是一个错误。这至少有一点误导性。 (2认同)