我是C ++的初学者,最近我被引入了像std这样的命名空间。但是,如果在iostream头文件中定义了类似cout和endl的函数,为什么要包含std命名空间呢?或者这些函数是否实际在std命名空间中定义?如果是这种情况,那么为什么要包含iostream文件?
答案 0 :(得分:4)
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
标识符。
答案 1 :(得分:1)
命名空间和#include指令是不同的东西:
当您包含标题(如iostream)时,您告诉预处理器将文件的内容视为在源程序中出现包含的位置时出现这些内容。
为什么使用包含而不是仅仅将代码抛出?
自: http://www.cplusplus.com/forum/articles/10627/
另一方面,(1)它加快了编译时间。随着您的计划的发展,您的计划也在增长 代码,如果一切都在一个文件中,那么一切都必须如此 每次进行任何小改动时都要完全重新编译。这可能不是 对于小型程序来说似乎是一件大事(事实并非如此),但是当你这么做的时候 有一个合理的大小项目,编译时间可能需要几分钟 编译整个程序。你能想象不得不等待 每次微小变化之间的长期?
编译/等待8分钟/“哦废话,忘了分号”/编译/ 等待8分钟/调试/编译/等待8分钟/等等
(2)它使您的代码更有条理。如果你把概念分开 特定文件,更容易找到您正在寻找的代码 你想做出修改(或者只是看它来记住如何修改 使用它和/或它是如何工作的。)
(3)它允许您将接口与实现分开。如果你 不明白这意味着什么,不用担心,我们会看到它在行动 整篇文章。
命名空间允许您在范围内对类和函数进行分组。它们提供了一种避免这些实体之间名称冲突的方法,而没有处理嵌套类的不便。
答案 2 :(得分:0)
如果使用namespace std,则不必使用std :: cout。 在这种情况下写cout就足够了。