【发布时间】:2014-08-16 02:16:27
【问题描述】:
考虑以下代码:
#include<iostream>
namespace
{
int a = 5;
}
namespace
{
int a = 5;
}
int main()
{
int i=5;
{
std::cout << i;
}
}
此代码无效。这是因为发生了a 的重新定义。但我预计这是有效的。实际上,秒。 3.3.6/1 说:
[...]由 original-namespace-name 表示的潜在范围是 由每个 命名空间定义在同一个声明区域中 原始命名空间名称.[...]
但未命名的命名空间定义不是 original-namespace-definition 和 sec. 7.3.1/1 说:
namespace-name:
original-namespace-name
namespace-alias
original-namespace-name:
identifier
和
original-namespace-definition:
inline_opt namespace identifier { namespace-body }
此外,秒。 7.3.1.1 说:
一个未命名的命名空间定义的行为就像它被替换了一样
inlineopt namespace unique { /* empty body */ } using namespace unique ; namespace unique { namespace-body }当且仅当它出现在 unnamed-namespace-definition,所有出现的唯一性 翻译单元被相同的标识符替换,并且这个 标识符不同于整个程序中的所有其他标识符。
这意味着两个未命名的命名空间具有不同的独特。
你能解释一下我引用的代码中的行为吗?
【问题讨论】:
标签: c++ namespaces unnamed-namespace