【发布时间】:2014-05-11 06:28:28
【问题描述】:
我目前正在使用21 天自学 C++,第二版一书来学习 C++ 编码以及 Microsoft Visual C++ 2010 Express。在第 1 章的最后,有一个关于编写和编译以下代码的小练习:
#include <iostream>
int main ()
{
cout << "Hello World!\n";
return 0;
}
很简单,对吧?然而令我惊讶的是,由于这个错误,代码无法编译:
错误 C2065:“cout”:未声明的标识符
我开始在网上搜索,很快找到了一些解决方案here。原来我不得不添加
using namespace std; 我的代码!
但是书中没有提到命名空间,所以我认为这本书已经过时了。 (它使用 #include <iostream.h> 预处理器指令!)在进行了更多的 Web 研究后,我发现了很多关于名称空间的信息,namespace std,以及一些关于 <iostream.h> 和 <iostream> 的历史背景,以及所有这些新的流程信息让我很困惑。 (更不用说所有关于医学 STD 的不必要的 Google 结果......)
到目前为止,我有一些问题:
- 如果我包含
iostream库,为什么需要namespace才能找到cout?是否有另一个cout可能导致名称冲突?如果有人可以为此提供图表,那就太好了。
另外,还有一些历史背景:
iostream.h在更改为iostream之前究竟是什么?namespace是否参与了这一变化?
【问题讨论】:
-
您不必将
using namespace std;添加到您的代码中。你必须在main中说std::cout或using std::cout;。 -
但是为什么需要
std部分呢?iostream里面有几个couts吗? -
因为
cout在std命名空间内。
标签: c++ c++11 namespaces