16

编程语言 C++ 的名称来源于父语言 C 和 ++ 运算符(可以说应该是 ++C),因此,该表达式C++可能自然地出现在 C++ 程序中。我想知道您是否可以使用 2011 标准(不带扩展名)编写一个有效的 C++ 程序,并且包含C++11 不在引号内和预处理后的表达式(注意:编辑了要求,另见答案)。

C++98显然,如果您可以使用表达式or编写 2011 标准之前的 C++ 程序C++03,那么答案是肯定的。但我不认为这是可能的(虽然我真的不知道)。那么,可以用 C++11 的新军械库来完成吗?

4

3 回答 3

8

如果我们要求字符C++11任何文字之外,则在预处理之后不- 因为在翻译阶段 7 三个标记将是identifier,++integer-literal

前两个标记是 a postfix-expression,后一个是 a primary

可以按顺序包含这两个非终结符的文法没有减少,因此任何包含的程序C++11都将无法进行语法分析。

但是,如果您不认为字符文字是字符串,那么答案是肯定的,因为您可以将它包含在宽字符文字中:

int main()
{
    wchar_t x = L'C++11';
}

它不使用预处理器或字符串文字,并且该构造需要由标准支持:

包含多个 c 字符的宽字符文字的值是实现定义的。

于 2013-04-05T23:32:01.773 回答
0

那么,可以用 C++11 的新军械库来完成吗?

不。

于 2013-04-04T23:14:23.043 回答
0

定义“有效的 C++ 程序”。

C++ 标准将“格式良好的 C++ 程序”定义为“根据语法规则、可诊断语义规则和单一定义规则构造的 C++ 程序”。这为 C++ 程序格式不正确的可能性敞开了大门。(C 明确具有符合但不严格符合的程序的概念,例如,使用特定编译器的扩展。)

如果您认为使用扩展是有效的,那么您可以实现C++11在某些情况下允许的 C++ 编译器。

于 2013-04-06T09:51:30.777 回答