其他人告诉我,编写using namespace std;
代码是错误的,应该直接使用std::cout
和std::cin
代替。
为什么被using namespace std;
认为是不良做法?它的效率低下std
吗?还是冒着声明模棱两可的变量(与命名空间中的函数同名的变量)的风险?它会影响性能吗?
这根本与性能无关。但是考虑一下:你正在使用两个名为Foo和Bar的库:
using namespace foo;
using namespace bar;
一切正常,你可以Blah()
从Foo和Quux()
Bar轻松致电。但是有一天,你将升级到Foo 2.0的新版本,该版本现在提供了名为的功能Quux()
。现在你有一个冲突:Foo 2.0和Bar都导入Quux()
到全局名称空间中。这将需要花费一些时间来解决,尤其是在功能参数碰巧匹配的情况下。
如果你使用foo::Blah()
和bar::Quux()
,那么引入foo::Quux()
将会是一件不可能的事。
我一直喜欢Python的“将big_honkin_name作为bhn导入”,因此您可以只使用“ bhn.something”而不是“ big_honkin_name.something”,这确实减少了键入。C ++有这样的东西吗?
@Pax名称空间io = boost :: filesystem;
我认为这是“修复工作”,实在是夸大其词。您将没有新foo :: Quux的实例,因此只需将bar :: Quux的所有当前使用情况消除歧义即可。
有理智的人会使用类型不合格的名称与std类型冲突的类型创建一个库吗?
@TomA:问题
#define
在于它不会将自身限制为名称空间,而是践踏了整个代码库。您想要的是名称空间别名。