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

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

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

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

回答

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

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

  • @Maestro As of C++20, this will result in a truncated value (see the link from my previous comment). Before C++20, the result is implementation-defined.

以上是如果我的目标是可移植性,我应该对具有负值的字符使用带符号的字符吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>