我听说过使用名称空间std;这是不好的做法,我应该直接使用std::cout和std::cin。这是为什么?声明与std命名空间中的某个变量同名的变量是否有风险?
当前回答
老实说,对我来说,这就像讨论缩进空间的数量。
在标头中使用指令会导致损坏。但是在C++文件中呢?如果同时使用两个名称空间,可能会发生这种情况。但如果你使用一个,它更多的是风格而不是真正的效率。
你知道为什么关于缩进的线索如此流行吗?任何人都可以说些什么,听起来非常聪明和有经验。
其他回答
考虑两个名为Foo和Bar的库:
using namespace foo;
using namespace bar;
一切都很好,你可以从Foo调用Blah(),从Bar调用Qux()。但有一天你升级到了Foo 2.0的新版本,它现在提供了一个名为Qux()的函数。现在出现了一个冲突:Foo 2.0和Bar都将Qux()导入到全局命名空间中。这将需要一些努力来解决,特别是如果函数参数恰好匹配。
如果您使用了foo::Blah()和bar::Qux(),那么引入foo::Qux()将是一个非事件。
是的,名称空间很重要。在我的项目中,我需要将一个var声明导入到源代码中,但在编译时,它与另一个第三方库冲突。
最后,我不得不用其他方法来解决这个问题,并使代码变得不那么清晰。
另一个原因是惊讶。
如果我看到cout<<blah,而不是std::cout<<blah,我会想:这是什么cout?这是正常的服装吗?有什么特别的吗?
只要在头文件中不使用“using namespace std”,这应该是完全正常的。
如果与say boost有命名冲突,那么在特定的.cpp文件中不使用此语句,但通过在其他文件中的每一行上不重复“std::”十次,仍然可以保存每个人的眼睛和手指。
不幸的是,现在这是一个纯粹的宗教问题,每个人都更容易/更有效地遵循一遍又一遍重复“std::”的既定模式。
我也认为这是一种糟糕的做法。为什么?就在一天,我认为名称空间的功能是划分内容,所以我不应该将所有内容都放在一个全局包中而破坏它。
然而,如果我经常使用“cout”和“cin”,我会写:使用std::cout;使用std::cin;在.cpp文件中(当它使用include传播时,不会在头文件中)。我想,没有一个理智的人会说出一条小溪的名字