C++14 中 char 类型下限的变化是否会破坏与补码系统的兼容性?

Does the change in lower bounds for the char type in C++14 break compatibility with ones' complement systems?

为什么 C++14 中的 char 曾经被定义为比 char 以前可以容纳的值的数量少一个,他们改变这些东西的理由是什么C++14 标准?似乎从 http://en.cppreference.com/w/cpp/language/types 开始,C++14 已将下限从 -127 更改为 -128。

这会破坏与补体系统的兼容性吗?他们甚至改变界限的理由是什么?

不,我误解了更改; "change of bounds" 没有。事实上,唯一的变化是 C++14 需要字节来保存 256 个不同的值,这在之前的典型字节数据结构的能力范围内。

C++ 并没有通过要求其整数类型使用特定的二进制表示来限制其实现,这意味着体系结构可以自由地保持与 C++ 标准的一致性,即使它们决定使用非标准的整数类型的二进制表示。

来自 C++14 标准工作草案的第 3.9.1 节,基本类型:

7 Types bool , char , char16_t , char32_t , wchar_t , and the signed and unsigned integer types are collectively called integral types. A synonym for integral type is integer type. The representations of integral types shall define values by use of a pure binary numeration system.

[Example: this International Standard permits 2’s complement, 1’s complement and signed magnitude representations for integral types. —end example ]

如果我们确实计算单个 char 值可以容纳的值的数量,可以看出 C++14 将 char 的负数 space 增加了一个,总共256 个唯一值(包括 0)。我猜想之前的版本将 char 的下限保留在 -128 以与一个人的补充系统兼容。

编辑: 误解是一个的补码仍然可以容纳 256 个值;就是两个"represent"0,即+0和-0。如果我们用一个来表示别的意思,那么我们可以假装我们仍然有 256 个可分配的值,因此,足够 space 来满足 C++14 的 char 要求。

相关:Why not enforce 2's complement in C++?

C++14 标准工作草案:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf