在C和C ++中,规则是相同的。在C中,
[§6.4.4.4]/2
整数字符常量是一个或一个序列 用单引号括起来的更多多字节字符,如'x'
。
在C ++中,
[§2.14.3]/1
字符文字是一个或多个字符 在单引号中,如在'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。
答案 0 :(得分:10)
原因是字符文字被定义为字符。可能有一些扩展允许它更多而不是一个字符,但它必须至少是一个字符,或者它没有任何意义。这与试图做的相同:
int i = ;
如果你没有指定一个值,那么你把它放在那里?
答案 1 :(得分:3)
这是因为空字符串在末尾仍然包含空字符'\0'
,因此仍然有一个值绑定到变量名称,而空字符文字没有值。
答案 2 :(得分:0)
String是一组以NULL字符('\ 0')结尾的字符。 所以一个空字符串最后总会有一个NULL字符。
但是在字符文字的情况下没有值。 它至少需要一个角色。