'using'和'using namespace'的区别

31
在Boost库中,通常有包含库的示例,例如:
#pragma once
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;

在我的程序中,我一直像这样导入命名空间:

#include "../MyClass.h"
using namespace MyClassNamespace;

请有人解释一下:

  1. usingusing namespace之间的区别;
  2. 否定使用using namespace而选择using的优势是什么;
  3. usingusing namespace前向声明的差异。

谢谢


可能是using namespace的重复问题。 - user657267
1
@user657267 不是很确定。 - David G
@0x499602D2 在我看来有点道理,链接的答案试图指出这两个语句具有完全不同的用例,你不能说 using somenamespace 就像你不能说 using namespace notanamespace 一样。 - user657267
1
@user657267 我在发布这个问题之前看到了链接的答案,但我认为它没有充分回答我的问题。 - Ospho
2
正确的术语应该是“using声明”和“using指令”。https://dev59.com/amQo5IYBdhLWcg3wUd-L 包含一些相关答案。 - Jonathan Wakely
@redFIVE:这个问题现在已经成为谷歌搜索结果的第一名。 - davidg
2个回答

38

using namespace会将命名空间内所有的名称都暴露出来,而使用using语句只会暴露出特定对象的名称。


5
#include <iostream>

void print(){
using std::cout; 
using std::endl;
cout<<"test1"<<endl;
}
int main(){
 using namespace std;
cout<<"hello"<<endl;
print();
return 0;
}
  • 使用 "using namespace std" 时,所有在 std 命名空间下的元素都会在函数范围内可用。
  • 使用 "using std::cout" 时,我们明确指定所需的 std 命名空间下的元素,而不导入 std 下的所有元素。

这是我在 stack overflow 的第一个答案,请纠正我如果我错了!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接