在C和C++中,规则是相同的。在C中,一个整数字符常量是由一个或多个多字节字符包含在单引号内的序列,例如'x'。
在C++中,一个字符字面值是由一个或多个字符包含在单引号内,例如'x',可选地在前面加上字母u、U或L,例如u'y'、U'z'或L'x'。
关键词是“一个或多个”。相比之下,字符串字面值可以为空,"",这可能是因为它由空终止字符组成。在C中,这导致char的初始化不方便。要么将其未初始化,要么使用无用的值,如0或'\0'。
在C++中,如果您想要一个空字符串,必须使用字符串字面量而不是字符字面量。
在C++中,一个字符字面值是由一个或多个字符包含在单引号内,例如'x',可选地在前面加上字母u、U或L,例如u'y'、U'z'或L'x'。
关键词是“一个或多个”。相比之下,字符串字面值可以为空,"",这可能是因为它由空终止字符组成。在C中,这导致char的初始化不方便。要么将其未初始化,要么使用无用的值,如0或'\0'。
char garbage;
char useless = 0;
char useless2 = '\0';
在C++中,如果您想要一个空字符串,必须使用字符串字面量而不是字符字面量。
(somecondition ? ' ' : '') // error
(somecondition ? " " : "") // necessary
为什么会这样呢?我猜想 C++ 的原因是继承自 C。