是使用命名空间..就像坏?
可能重复:
为什么'使用名称空间标准;' 在C ++中被认为是不好的做法?
每次我使用using namespace std
我总是得到那个“这是一个可怕的编程习惯”。 现在我在十二月与我的学士学位毕业,但我并没有声称知道一切,但没有人解释过为什么这么糟糕。 我明白它的作用,但我真的没有看到它的巨大交易。
任何人都在意解释? 在我看来,它只是让输入cout
比std::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