我听说过使用名称空间std;这是不好的做法,我应该直接使用std::cout和std::cin。这是为什么?声明与std命名空间中的某个变量同名的变量是否有风险?


当前回答

一个例子是,使用名称空间std会因为计数的模糊性而引发编译错误,这也是算法库中的一个函数。

#include <iostream>
#include <algorithm>

using namespace std;

int count = 1;
int main() {
    cout << count << endl;
}

其他回答

这取决于它的位置。如果它是一个公共的头,那么通过将其合并到全局名称空间中,可以减小名称空间的值。请记住,这可能是制作模块全局的一种简单方法。

下面是一个示例,展示了如何使用命名空间std;可能会导致名称冲突问题:

无法在C中定义全局变量++

在本例中,一个非常通用的算法名称(std::count)与一个非常合理的变量名称(count)冲突。

“为什么在C++中‘使用命名空间std;’被认为是一种糟糕的做法?”

我反过来说:为什么有些人认为额外键入五个字符很麻烦?

例如,考虑编写一个数字软件。当“vector”是问题领域最重要的概念之一时,我为什么还要考虑将通用的“std::vector”缩减为“vector”来污染我的全局命名空间?

您需要能够阅读与您不同风格和最佳实践意见的人编写的代码。如果你只使用cout,没有人会感到困惑。但是,当你有很多名称空间到处飞的时候,你看到这个类,你不太确定它做什么时,让名称空间显式充当某种注释。您可以第一眼看到,“哦,这是一个文件系统操作”或“这是在做网络工作”。

是的,名称空间很重要。在我的项目中,我需要将一个var声明导入到源代码中,但在编译时,它与另一个第三方库冲突。

最后,我不得不用其他方法来解决这个问题,并使代码变得不那么清晰。