c++ - 是否存在具有表达式 'C++11' 的有效 C++11 程序?

标签 c++ c++11

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

显然,如果您可以使用表达式 C++98C++03 编写早于 2011 标准的 C++ 程序,那么答案很简单是的。但我不认为这是可能的(虽然我真的不知道)。那么,C++11 的新军械库能做到吗?

最佳答案

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

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

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

然而,如果您不认为字 rune 字是字符串,那么答案是 YES,因为您可以将它包含在宽字 rune 字中:

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

不使用预处理器或字符串字面量,该结构需要标准支持:

The value of a wide-character literal containing multiple c-chars is implementation-defined.

关于c++ - 是否存在具有表达式 'C++11' 的有效 C++11 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816175/

相关文章:

c++ - 在表达式中使用用户定义的文字有时需要空格

c++ - STL的缺陷

C++ - 在传递到 `std::function` 时指定重载的仿函数或函数

c++ - 是否可以在构造函数之前调用 C++ 对象实例的析构函数?如果是这样,如何?

c++ - 如何将 std::vector 用于带句柄的类

c++ - 为什么 Mingw 在编译时更改我的标识符名称?

c++ - 将用户定义的文字与方法调用相结合

c++ - boost 和图形化

c++ - 为什么一些 Boost 函数不需要命名空间前缀

c++ - 全局命名空间前缀的规则和实践?