我正在查看C++ 03标准中的第7.3.1.1节,期望找到对未命名的命名空间中定义的项的访问规则的一些描述.
对于未命名的命名空间,规则似乎略有不同,因为您无法完全限定对一个项目的访问权限.我知道至少在同一个翻译单元中,可以访问未命名的命名空间中的项目,就好像它们不在命名空间中一样.例如:
namespace {
int foo;
}
void something()
{
foo = 4;
}
Run Code Online (Sandbox Code Playgroud)
如果命名空间有名称,则无法执行此操作.那么,标准中为这些适用于未命名命名空间的例外规则定义的规则在哪里?
匿名命名空间基本上被视为:
namespace unique_per_TU
{
// Stuff
}
using namespace unique_per_TU;
Run Code Online (Sandbox Code Playgroud)
我会在一分钟内尝试找到这里的参考.
编辑:
看来你已经找到它了 7.3.1.1/1
未命名的命名空间定义的行为就像被替换为
namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespacebody }
Run Code Online (Sandbox Code Playgroud)
其中翻译单元中所有唯一的出现都被相同的标识符替换,并且该标识符与整个程序中的所有其他标识符不同.
正如您所发现的那样,"假"使用已经将命名空间成员带入全局命名空间.
| 归档时间: |
|
| 查看次数: |
4321 次 |
| 最近记录: |