编译器限制

C++ 标准建议对各种语言构造施加限制。 下面是 Microsoft C++ 编译器不会在其中实施建议的限制的情况的列表。 第一个数字是 ISO C++ 11 标准(INCITS/ISO/IEC 14882-2011[2012],附件 B)中建立的限制,而第二个数字是由 Microsoft C++ 编译器实现的限制:

  • 复合语句、迭代控制结构和选择控制结构的嵌套级别 - C++ 标准:256,Microsoft C++ 编译器:具体取决于嵌套语句的组合,但通常介于 100 和 110 之间。

  • 一个宏定义中的参数 - C++ 标准:256,使用 /Zc:preprocessor-:127 或使用 /Zc:preprocessor:32767 的 Microsoft C++ 编译器。

  • 一个宏调用中的自变量 - C++ 标准:256,使用 /Zc:preprocessor-:127 或使用 /Zc:preprocessor:32767 的 Microsoft C++ 编译器。

  • 字符串文本或宽字符串文本中的字符(串联后)- C++ 标准:65536,Microsoft C++ 编译器:包括 NULL 终止符的 65535 个单字节字符,以及包括 NULL 终止符的 32767 个双字节字符。

  • 单个 struct-declaration-list 中的嵌套类、结构或联合定义的级别 - C++ 标准:256,Microsoft C++ 编译器:16。

  • 构造函数定义中的成员初始值设定项 - C++ 标准:6144,Microsoft C++ 编译器:至少为 6144。

  • 一个标识符的范围限定 - C++ 标准:256,Microsoft C++ 编译器:127。

  • 嵌套 extern 规范 - C++ 标准:1024,Microsoft C++ 编译器:9(未计算全局范围中的隐式 extern 规范;如果计算全局范围中的隐式 extern 规范,则为 10)。

  • 模板声明中的模板自变量 - C++ 标准:1024,Microsoft C++ 编译器:2046。

另请参阅

非标准行为