如果我的目标是可移植性,我应该对具有负值的字符使用带符号的字符吗?
甲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_t或uint8_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.