【问题标题】:Why can't character constants/literals be empty?为什么字符常量/文字不能为空?
【发布时间】:2014-12-23 04:48:02
【问题描述】:

在 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。

【问题讨论】:

    标签: c++ c character


    【解决方案1】:

    原因是字符文字被定义为字符。可能有一些扩展允许它更多超过一个字符,但它必须至少是一个字符,否则它就没有任何意义。这和尝试做的一样:

    int i = ;
    

    如果你不指定一个值,你会放什么?

    【讨论】:

    • 不需要任何扩展。多字符文字是非常标准的,它们只是不是很有用,因为它们的值是由实现定义的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      但如果是字符文字,则没有值。 它至少需要一个字符。

      【讨论】:

        猜你喜欢
        • 2011-07-02
        • 1970-01-01
        • 2020-10-12
        • 2013-07-15
        • 2020-09-25
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多