为什么字符常量/字面值不能是空的?

3
在C和C++中,规则是相同的。在C中,一个整数字符常量是由一个或多个多字节字符包含在单引号内的序列,例如'x'。
在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。

3个回答

10

原因是字符字面量被定义为一个字符。可能有一些扩展可以使其成为多个字符,但至少需要一个字符,否则它就没有任何意义。这就像尝试执行以下操作一样:

int i = ;

如果您没有指定一个值,那么应该放什么?


3
不需要任何扩展。多字符文字是很标准的,只是它们不是很有用,因为它们的值是实现定义的。 - Praetorian

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

0

字符串是由一个空字符('\0')终止的一组字符。因此,空字符串总是在末尾有一个空字符。

但是,在字符字面值的情况下,没有值存在。它需要至少一个字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接