【问题标题】:should I use the name space std? [duplicate]我应该使用命名空间标准吗? [复制]
【发布时间】:2014-10-12 02:33:01
【问题描述】:

使用命名空间 std 是不是更好的编程习惯?

这样做更好吗:

std::cout << "hi" << std::endl;

或者这个:

using namespace std;

    cout << "hi" << endl;

为什么有两种不同的方法可以做到这一点,哪种方法是更好的编程实践?

编辑:

我仍然想知道为什么我们有两种不同的方式来调用这些函数,特别是因为众所周知使用命名空间可能会出现问题。那么为什么我们甚至有命名空间呢?像std::cout 这样打电话不是更安全吗?如果它会导致错误,为什么它们允许我们使用它?

【问题讨论】:

  • IMO 前者是因为using namespace std; 会引入难以发现的细微错误。

标签: c++ namespaces std


【解决方案1】:

这取决于您正在编写的项目。在大型项目中,命名空间往往会发生冲突——例如,如果你在某个时候决定调用你的函数 min(),但是等等——那里已经有 std::min() 函数,这可能会导致混淆哪个函数将被运行在代码的某些部分。

所以,经验法则是使用 using namespace std;仅在相当小的项目中,并在您编写比单个文件更大的内容时使用自己的命名空间。毫无疑问,命名空间冲突是我们真正想要避免的事情,因为它是令人痛苦的错误的来源。

另外一点是,使用命名空间std;在 cpp 文件中危害较小 - 尤其是 main.cpp。如果您经常使用 std 函数,这可以使您的代码更易于阅读。大问题开始了,当 using namespace 最终出现在头文件中时 - 这个头被另一个头包含等等。在某些时候,很难知道声明要使用哪些命名空间。这被称为命名空间污染。

但是,在 main.cpp 中,这不应该是这种情况,如果使用得当,它可以简化代码。

【讨论】:

  • 我仍然想知道为什么我们有两种不同的方式来调用这些函数,特别是因为众所周知使用命名空间可能会出现问题。那么为什么我们甚至有命名空间呢?像 std::cout 这样调用不是更安全吗?如果它会导致错误,为什么它们允许我们使用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多