我一直想知道为什么 C++ 标准库使用 char
类型而不是 unsigned char
类型来实例化 basic_[io]stream 及其所有变体。 char
意味着(取决于它是否已签名)您可以对 get() 等操作进行上溢和下溢,这将导致所涉及变量的实现定义值。另一个例子是当你想使用它的 put
函数将一个未格式化的字节输出到一个 ostream。
有什么想法吗?
注意:我还是不太相信。因此,如果您知道确切的答案,您仍然可以发布它。
最佳答案
可能我误解了这个问题,但是从 unsigned char 到 char 的转换不是未指定的,它取决于实现(C++ 标准中的 4.7-3)。
C++ 中 1 字节字符的类型是“char”,而不是“unsigned char”。这为实现提供了更多的自由来在平台上做最好的事情(例如,标准机构可能认为存在有符号字节算术比无符号字节算术更快的 CPU,尽管这是我的猜测)。也是为了与 C 兼容。从 C++ 中消除这种存在不确定性的结果是 C# ;-)
鉴于存在“char”类型,我认为即使未定义其符号,通常流也可以使用它。因此,也许您的问题可以通过“为什么 C++ 不将 char 定义为无符号?”的答案来回答?
关于c++ - 为什么 C++ 流使用 char 而不是 unsigned char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277655/