3

我是 C++ 的初学者,最近我被介绍给 std 之类的命名空间。但是,如果在 iostream 头文件中定义了 cout 和 endl 之类的函数,为什么还要包含 std 命名空间呢?还是这些函数实际上是在 std 命名空间中定义的?如果是这样,那么为什么要包含 iostream 文件?

4

3 回答 3

6

一个 C++ 文件中可以有一个命名空间,不同的 C++ 文件内部可以有相同的命名空间。

// Header1.h
namespace SomeScope
{
  extern int x;
}

// Header2.h
namespace SomeScope
{
  extern int y;
}

// Some CPP file
#include "Header1.h" // access to x
SomeScope::x = 5;

#include "Header2.h" // access to y
SomeScope::y = 6;

我希望这有帮助。命名空间就像一个存储各种标识符的地方,以避免名称冲突。SomeScope::x是与 完全不同的x标识符AnotherScope::x

于 2013-05-15T18:43:19.203 回答
4

命名空间和#include 指令是不同的东西:

当您包含标头(如 iostream)时,您是在告诉预处理器处理文件的内容,就好像这些内容已出现在源程序中包含出现的位置一样。

为什么要使用包含而不是直接将代码扔在那里?

来自: http ://www.cplusplus.com/forum/articles/10627/

(1) 加快编译时间。随着程序的增长,您的代码也会增长,如果所有内容都在一个文件中,那么每次进行任何微小更改时都必须完全重新编译所有内容。对于小程序来说,这似乎没什么大不了的(实际上也不是),但是当您有一个合理大小的项目时,编译整个程序可能需要几分钟的时间。你能想象在每次小改动之间都要等那么久吗?

编译/等待 8 分钟/“哦,废话,忘记分号”/编译/等待 8 分钟/调试/编译/等待 8 分钟/等等

(2) 它使您的代码更有条理。如果您将概念分离到特定文件中,则在您想要进行修改时更容易找到您正在寻找的代码(或者只是查看它以记住如何使用它和/或它是如何工作的)。

(3) 它允许您将接口与实现分开。如果您不明白这意味着什么,请不要担心,我们将在本文中看到它的实际应用。

另一方面,命名空间允许您在一个范围内对类和函数进行分组。它们提供了一种方法来避免这些实体之间的名称冲突,而不会带来处理嵌套类的不便。

于 2013-05-15T19:03:57.087 回答
0

例如,如果您使用 using namespace std,则不必使用 std::cout。在这种情况下,写 cout 就足够了。

于 2017-11-18T22:17:59.467 回答