如果我的目标是可移植性,我应该对具有负值的字符使用带符号的字符吗?

Mae*_*tro 1 c++ char unsigned-char

char数据类型是不能保证签名,它是该装置上一些实施方式中signed,和对他人它是unsigned。那么为什么人们总是忽略signed限定词呢?

char c = 'C'; // can be signed or unsigned
signed char sc = 'D'; // explicitly signed
unsigned char uc = 'e'; // explicitly unsigned
Run Code Online (Sandbox Code Playgroud)
  • 对于可移植性,我就应该总是限定一个char带有signed如果我想的字符保持负值?

  • 正如我所了解的其他类型,如int, long,short总是signed除非明确限定为unsigned

And*_*hev 5

该类型char主要用于存储字符(或者,在 Unicode 时代,部分字符代码)。从这个意义上说,你不应该关心它是否有符号,只要它能够表示字符。

当您需要char大小的整数时,您应该使用signed charorunsigned char或它们的典型别名之一(例如int8_tuint8_t)。这将确保签名并将类型与字符区分开来。

  • @Maestro 从 C++20 开始,这将导致值被截断(请参阅我之前评论中的链接)。在 C++20 之前,结果是实现定义的。 (3认同)