为什么字符常量/文字不能为空?

时间:2014-12-23 04:48:02

标签: c++ c character

在C和C ++中,规则是相同的。在C中,

  

[§6.4.4.4]/2整数字符常量是一个或一个序列   用单引号括起来的更多多字节字符,如'x'

在C ++中,

  

[§2.14.3]/1字符文字是一个或多个字符   在单引号中,如在'x'中,可选地以其中一个引号开头   字母uUL,如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。

3 个答案:

答案 0 :(得分:10)

原因是字符文字被定义为字符。可能有一些扩展允许它更多而不是一个字符,但它必须至少是一个字符,或者它没有任何意义。这与试图做的相同:

int i = ;

如果你没有指定一个值,那么你把它放在那里?

答案 1 :(得分:3)

这是因为空字符串在末尾仍然包含空字符'\0',因此仍然有一个值绑定到变量名称,而空字符文字没有值。

答案 2 :(得分:0)

String是一组以NULL字符('\ 0')结尾的字符。 所以一个空字符串最后总会有一个NULL字符。

但是在字符文字的情况下没有值。 它至少需要一个角色。