You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ISO/IEC 14882:2011(E) [reserved.names]/2含义及相关规则技术问询

关于ISO/IEC 14882:2011(E)标准[reserved.names]/2条款的疑问解答

标准相关条款引用

reserved.names条款规定:

  1. C++标准库保留以下类型的名称:宏、全局名称、具有外部链接的名称;
  2. 若程序在保留上下文中声明或定义名称,除非本条款明确允许,否则行为未定义。

global.names条款规定:

  1. 某些名称集和函数签名始终保留给实现使用:包含双下划线__或以下划线后跟大写字母开头的名称(2.12)保留给实现任意使用;以下划线开头的名称保留给实现用作全局命名空间中的名称。

问题与解答

1. [reserved.names]/2中的‘明确允许’指什么?或在何种情况下名称属于‘明确允许’范畴?

这里的“明确允许”指C++标准中直接规定用户可在保留上下文内声明/定义特定名称的场景,或是标准通过条款明确排除某类场景的保留限制,等同于允许用户使用该类名称。

直白来说:如果标准没有禁止某类名称在特定上下文的使用,或是明确指出该场景下用户可使用名称,就属于“明确允许”的范畴。比如标准仅限制全局命名空间中下划线开头的名称,那么非全局上下文的这类名称使用就属于明确允许。

2. 是否意味着我们可以在局部命名空间中使用以下划线后跟小写字母开头的名称?若可以,这是否属于‘明确允许’的情况?

可以在局部命名空间(包括用户自定义命名空间、函数局部作用域等非全局命名空间场景)中使用以下划线后跟小写字母开头的名称。

这属于[reserved.names]/2中“明确允许”的情况:根据[global.names]条款,仅全局命名空间中下划线开头的名称被保留给实现,该条款明确排除了局部命名空间的限制,因此用户在局部命名空间中使用这类名称的行为,符合“明确允许”的要求,不属于未定义行为。


内容的提问来源于stack exchange,提问作者iTruth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:30:43