相关疑难解决方法(0)

使用声明解决歧义

看看这个片段:

namespace A {
int fn();
}
namespace B {
int fn();
}

// namespace Ns {

using namespace A;
using namespace B;
using A::fn;

int z = fn();

// }
Run Code Online (Sandbox Code Playgroud)

这段代码不能编译,因为fn()它不明确int z = fn();

如果我将using's并z放入命名空间(删除两个//),代码将编译.这是为什么?全局命名空间有什么特别之处?

c++

7
推荐指数
1
解决办法
170
查看次数

使用命名空间行为背后的基本原理

引用标准:

using 指令指定指定命名空间中的名称可以在 using 指令出现在 using 指令之后的范围内使用。在非限定名称查找 (3.4.1) 期间,名称看起来好像是在最近的封闭名称空间中声明的,该名称空间包含 using 指令和指定名称空间。

看看这段代码:

namespace A {

    int fn() { return 1; }

}

namespace Inner {

    int fn() { return 2; }

    namespace B {

        using namespace A;

        int z = fn();

    }

}
Run Code Online (Sandbox Code Playgroud)

在这里,在我知道命名空间的确切规则之前,我曾期望z将其初始化为 1,正如我所写的那样using namespace A,因此预计A::fn()将使用它。但事实并非如此,z将被初始化为2,Inner::fn()因为我引用的规则而被称为。

这种行为背后的基本原理是什么:“好像它们是在最近的包含 using 指令和指定命名空间的封闭命名空间中声明的”?

如果using namespace为该命名空间中的所有内容应用 using 声明,会有什么缺点?

注意:是促使我提出这个问题的相关问题。

c++ namespaces language-lawyer

5
推荐指数
1
解决办法
238
查看次数

标签 统计

c++ ×2

language-lawyer ×1

namespaces ×1