C++中,头文件与命名空间的关系

有些书说有些头文件不在std里是什么意思?std里包含些什么?为什么不用std就不能使用cout?头文件中声明的东西为什么在使用的时候需要先using namespace std;一下?
如果我不用#include<iostream>和其他头文件。只用using namespace std 的话,是不能用cout的。这说明cout是在iostream里声明的,想不通既然声明了为什么还要using namespace一下?但是不using的话vc6报错cout 没有声明。不懂。

如果你熟悉Java的话,名字空间就是Java里的包。
也就是说,当C++进行开发时,我可以有两个函数的名字都叫A,那么我凭什么区分他们呢?我可以把他们放到两个名字空间里,这就是c++地解决之道。所以一般来说,特定的函数和类是放在特定的名字空间里的。std是标准名字空间,当然不能把所有的函数封装到这个里面,所以有些头文件里的函数群是不在这个名字空间的。如果你用了cout,编译器就必须知道他是哪个空间里的名字,进而才能推定其含义。
简单的说吧,名字空间就像一个函数,他把一些变量放在里面,变成了局部变量,当你要用这个变量的时候,就要调用这个函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-07
yangguo2005 | 五级
看这个例子:
namespace std
{
int temp;
......
}//建立一个名字空间
如果不使用using ,那么你在外面这样:
temp=9;是错误的,不过可以这样:std::temp=9;
加上using namespace std后
就可以 temp=9了。当然对于cout来说,你不加using namespace std的话,也可以这样: std::cout来应用的,你不妨试试。其实引入命名空间,就是为了扩大为变量或函数命名的范围。使所有的名字都从属于一个机构。这就相当于,每个学校里的班级的名字是一样的,但由于从属了不同的学校,所以可以区分开来。这里的namespace 便是学校的名字了。
第2个回答  2005-11-03
看这个例子:
namespace std
{
int temp;
......
}//建立一个名字空间
如果不使用using ,那么你在外面这样:
temp=9;是错误的,不过可以这样:std::temp=9;
加上using namespace std后
就可以 temp=9了。当然对于cout来说,你不加using namespace std的话,也可以这样: std::cout来应用的,你不妨试试。其实引入命名空间,就是为了扩大为变量或函数命名的范围。使所有的名字都从属于一个机构。这就相当于,每个学校里的班级的名字是一样的,但由于从属了不同的学校,所以可以区分开来。这里的namespace 便是学校的名字了。
第3个回答  2005-11-03
std是C++的标准库,cout是C++标准库里的一个io对象,为了区分各自的类所以加了名称空间在里面,因为有时候大家或各大公司的类库都会用相同的名字来命名类等东西。如果不用命名空间的话使用两个相同的类名或函数名之类的东西就会出错。
第4个回答  2005-11-03
hitwangye和yangguo2005正解。std是在iostream头文件中声明的命名空间。命名空间的目的就是为了区别使用同名函数、对象。
相似回答