这是一个不好的做法,普遍标签的东西“坏习惯”为替代讨论真正的问题和权衡。
某些技术可能不好,经常被滥用。 using
和特别是using namespace
指令可能会被滥用,所以一个奇怪的心态是只是说他们是某种“坏”的。
里面一个.cpp文件,你必须在命名空间(一个或多个)更多的控制,所以using std::cout
在文件范围内,甚至using namespace my_funny_namespace
是罚款,只要对冲突的机会是可控的且有可读性一定的增益。在某些时候,如果.cpp文件变得复杂,您可能会冒一个新名字被添加到some_funny_namespace
的风险,该名称与您的某个名称冲突,并且using namespace some_funny_namespace
会带来会破坏您的代码的内容。但是对于像boost或std这样稳定的东西,这可能不太可能。
您也可以在本地按功能使用using
。但是如果文件中的大多数函数都需要相同的声明,D.R.Y.
它可以跨越线路成为一个非常糟糕的事情是当你在标题中使用其中任何一个。然后,你已经从另一个命名空间的名字泄漏到每个包含你的标题的文件中。 See this great answer替代和讨论。这是非常糟糕的,因为它可以导致包括或不包括在内的一个远程bug问题 - 包括一个头部导致一些完全不相关的问题出现或消失。这不仅仅是“你的”代码可能会破坏,它可能会破坏别人使用你的头文件的代码。
不漏的名字到其他命名空间
所以using
,尤其是在using namespace
是头verbotten?如果标题是在一组选定的.cpp文件内部使用的,该怎么办?那么,也许没关系。这就是cookie-cutter规则的问题,总是有一个例外,并且假设一些假设的东西更糟糕没有理由,但最佳做法是可怕的。
using
的可读性(应该是而不是被低估)。
其缺点是名称冲突的可能性,尤其是其他随机代码中的不可预知的冲突。
明智地选择。仔细考虑你的设计的各个方面是的好习惯。
(并且问好的问题也不错)。
不是语法只是'使用std :: cout;'? '如果'std :: cout'是一个命名空间,那么使用命名空间std :: cout;'会用于命名空间。 – user2357112
'使用命名空间std :: cout;'不会编译,因为'cout'不是一个命名空间。因此,我怀疑这是你在代码中使用的实际行。 –
哦,对!感谢您注意它,这只是一个滑。 – Darktega