编程原理与实践第二版有符号字符溢出



我已经完成了C++入门第5版,现在我正在阅读Strostrup的C++编程原理和实践第2版。然而,在许多情况下,作者似乎依赖于一些UBs,比如这个:

int x = 2.9;
char c = 1066;

这里,x将得到值2而不是2.9,因为xint,而ints的值不是整数的分数,只是整整数(显然(。类似地,如果我们使用公共ASCII字符集,c将得到值42(表示字符*(,而不是1066,因为在该字符集中没有值为1066char

但是char x = 1066;溢出了signed char,所以行为是未定义的,我不确定他在说什么:它产生*,因为UB可以像我猜测的那样意味着任何东西,因此我们不依赖甚至不猜测结果。你觉得呢?非常感谢。

但是char x=1066;溢出了一个有符号的字符,因此行为是未定义的

这不是真的。

溢出是算术运算的结果。这里发生的是转换。将一个不可表示的整数转换为另一个整数类型不会有未定义的行为,即使该类型是有符号的。

p.S.char不是signed char。它们是不同的类型。它的实现定义了char是有符号的还是无符号的。

最新更新