C++ 中使用声明后的非限定名称查找

问题描述 投票:0回答:1

来自cppreference

从 using 指令之后的任何名称的非限定名称查找的角度来看,直到它出现的范围结束,命名空间名称中的每个名称都是可见的,就好像它是在最近的封闭命名空间中声明的一样,其中包含using 指令和命名空间名称。

包含命名空间名称的“最内部”作用域是声明命名空间名称的作用域,并且它必须包含包含 using 指令的作用域,以便 using 指令有效。

这意味着“包含 using 指令和命名空间名称的最近的封闭命名空间”就是声明了命名空间名称的命名空间。既然如此,为什么要说得这么啰嗦呢?

我是不是误会了什么?这里有我遗漏的微妙之处吗?

c++ scope namespaces using-directives
1个回答
0
投票

只是声明了命名空间名称的命名空间。 在这种情况下,为什么要以如此冗长的方式表达它?

情况并非总是如此。为了清楚起见,请考虑以下人为的示例

int i = 12; 
namespace outer
{
    namespace n1
    {
        int i = 10;
    }
} 
namespace n2
{
    void f()
    {
        using namespace outer::n1; 
        int k = i;   //this is ambigious because i already exists in global namespace
        
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.