是使用命名空间..就像坏?

可能重复:
为什么'使用名称空间标准;' 在C ++中被认为是不好的做法?

每次我使用using namespace std我总是得到那个“这是一个可怕的编程习惯”。 现在我在十二月与我的学士学位毕业,但我并没有声称知道一切,但没有人解释过为什么这么糟糕。 我明白它的作用,但我真的没有看到它的巨大交易。

任何人都在意解释? 在我看来,它只是让输入coutstd::cout更能承受。

我可以理解为什么你不想把它放在一个头文件中,但只是在一个正常的实现文件中......我不明白为什么它会是一个问题。


在别处发现了这个有用的帖

命名空间分离和组织功能。 你可以有一个xander333::sort()函数,它不会与std::sort()boost::sort()或其他的sort()相冲突。 没有名称空间,只能有sort()

现在让我们假设你已经把“using namespace std;” 在你所有的源文件中,你已经在其中一个文件的全局命名空间中实现了一个名为fill()的简单模板函数。 这个文件还依赖于libFoo头文件foo.hpp 。 libFoo的2.1版本出来了,突然你的程序不再编译。 你的fill()版本突然与另一个fill()冲突! 发生了什么?

事实证明,实现libFoo的人员包含在新版本的foo.hpp ,之前他们没有。 现在,您已经将所有标准算法包含在源文件中,并且using namespace std; 已将它们全部拉入全球命名空间。 std::fill()现在直接与你的fill()冲突。

更阴险的是,你已经通过将你的fill()重命名为xander333_fill()来获得你的代码来编译,但是某些东西不能正常工作 - 你的报告号码是关闭的。 事实证明,您的自定义divides()函数,不会再被调用,因为模板函数(也包含在foo.hpp )可以更好地匹配,因为您调用的类型并不完全相同匹配声明的类型。

有关讨论的主题在这里:

http://www.cplusplus.com/forum/unices/27805/


在大量使用stl的时候,在源文件中using namespace std没有任何问题,并且确定没有任何东西会碰撞。

但是,你通常不需要在整个文件中using namespace std或不using namespace std

你知道你可以吗:

void somefunction()
{
  // Use it in a particular scope
  using namespace std;

  cout << "test" << endl;
}

我知道的一个“良好实践”不是在包含文件中using namespace ,而是可以在私人.cpp文件中随意使用它。 我知道那些喜欢一切都是完全合格的人,有些人(比如我)认为string是一个std::string除非另有说明。

原因是,如果/当别人使用你的包含文件(并且总是发生这种情况),他们被迫接受你的编程风格。

祝你好运!

链接地址: http://www.djcxy.com/p/29779.html

上一篇: Is using namespace..like bad?

下一篇: std::string vs string in c++