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

Why can't character constants/literals be empty?

本文关键字:不能 文字 字符常量 为什么      更新时间:2023-10-16

在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'' .

char garbage;
char useless = 0;
char useless2 = '';

在 C++ 中,如果您希望字符串文本为空,则必须使用字符串文本而不是字符文本。

(somecondition ? ' ' : '') // error
(somecondition ? " " : "") // necessary
是什么

原因呢?我假设C++的理由是从C继承而来的。

原因是字符文本被定义为字符。可能有扩展允许它成为多个字符,但它需要至少是一个字符,否则它没有任何意义。这与尝试执行的操作相同:

int i = ;

如果你不指定一个值,你在那里放什么?

这是因为空字符串末尾仍包含空字符'',因此仍有值要绑定到变量名称,而空字符文本没有值。

字符串是以 NULL 字符 ('\0' ( 结尾的一组字符。所以一个空字符串在末尾总是有一个 NULL 字符。

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