“using namespace std;”有什么好的替代方案?

3

欢迎来到Stack Overflow!我对你的问题进行了[编辑],集中关注我找不到现有好答案的部分。这是一个相当激烈的编辑,但我认为它可以成为一个可以重新打开并且有用的问题。 - Toby Speight
2个回答

6
主要的替代方案是,在全局作用域中使用using namespace std;将所有内容从std命名空间引入到全局命名空间中,其它替代方案如下:
  1. 只引入需要的名称,例如只使用using std::vector; 引入vector

  2. 在使用名称时始终使用显式的命名空间限定符,例如std::vector<int> v;(在头文件中,这几乎总是唯一需要做的事情)。

  3. 将所有名称引入,但在缩小的范围内引入(例如仅在函数内部)。例如void f() { using namespace std; vector<int> v; } - 这不会污染全局命名空间。


2
另一种选择是在每个地方都写上std::。这样做不被推荐,因为名称冲突并且不清晰。 如果您只写vector,我不会立即知道您是否正在使用某个数学三维向量还是标准库向量或其他内容。如果您写std::vector,就很清楚了。如果您使用using namespace stdvector可能会与我的3D数学类冲突,该类名为vector

很难说这是唯一的选择。 - Jesper Juhl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接