未命名的命名空间合法吗?
命名空间 { int Foo (int a); }
这段代码片段合法吗?如果是这样,我可以在任何地方引用 Foo,还是只能在某个域中引用 Foo?
namespace { int Foo (int a); }
Is this code snippet legal? If so, can I reference Foo in anywhere, or only in a certain domain?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是合法的,您可以在同一个 翻译单元。
匿名命名空间是对变量表示静态的标准规定方式,以将其范围限制在同一翻译单元内。
C++03 标准第 7.3.1.1 节未命名命名空间
第 2 段:
更新:
正如 @Matthieu M. 在评论中正确指出的那样,他的回答 C++11 标准从 C++03 标准中删除了上述引用,这意味着
static
关键字不是在命名空间范围内声明对象时已弃用,但匿名或未命名命名空间仍然有效。It is legal, You can use
Foo
anywhere in the same Translation Unit.Anonymous namespace is the standard prescribed way of saying
static
on variables to limit their scope to the same Translation unit.C++03 Standard section 7.3.1.1 Unnamed namespaces
para 2:
Update:
As @Matthieu M. correctly points out in the comments, and his answer The C++11 Standard removed the above quote from C++03 Standard, which implies that the
static
keyword is not deprecated when declaring objects in a namespace scope, Anonymous or Unnamed namespaces are still valid nevertheless.这是合法的。您可以在翻译单元内的任何位置引用
Foo
。来自 C++03 标准,第 7.3.1.1 节:
This is legal. You can reference
Foo
anywhere inside the translation-unit.From the C++03-standard, Section 7.3.1.1:
C++11 标准中的定义略有变化:
The definition changed slightly in the C++11 Standard: