sha*_*oth 31 c++ namespaces using
在using namespace不使用命名空间限定符的情况下,我可以直接看到该命名空间的全部内容.如果using namespace在广泛使用的头文件中发生这可能会导致问题- 我们可能无意中使两个具有相同类名称的名称空间可见,并且编译器将拒绝编译,除非类名称前缀为名称空间限定符.
我可以撤消,using namespace以便编译器忘记它之前看到它吗?
rlb*_*ond 37
不,但你可以告诉你的同事你不应该using在标题中有指令或声明.
Geo*_*che 16
正如其他人所说,你不能,问题不应该在那里.
您可以做的下一个最好的事情是引入您需要的符号,以便通过名称查找首选符号:
namespace A { class C {}; }
namespace B { class C {}; }
using namespace A;
using namespace B;
namespace D {
using A::C; // fixes ambiguity
C c;
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,您还可以使用命名空间包装违规包含:
namespace offender {
# include "offender.h"
}
Run Code Online (Sandbox Code Playgroud)
不,C++标准没有说"撤消".您被允许做的最好是限制范围using:
#include <vector>
namespace Ximpl {
using namespace std;
vector<int> x;
}
vector<int> z; // error. should be std::vector<int>
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,它using namespace Ximpl还会带来名称std空间中的所有名称.