首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问一个关于namespace和库的有关问题

2012-02-17 
问一个关于namespace和库的问题问一下,iostream和namespace std是什么关系在一段程序的开头,如果include i

问一个关于namespace和库的问题
问一下,iostream和namespace std是什么关系
在一段程序的开头,如果include iosteam而不使用using namespace std的话,下面就要在有些库函数前面加上std::,对此有点不理解。
我在书本上看到一段话:“#include<iostream>{int main()
  using namespace std;
  首先#include语句将头文件iostream放到名称空间std中,然后,using 编译指令时该名称空间在main()函数中可用"
引号内是完整的话,这是什么意思?
我如果在另外一个namespace里面也有一个头文件叫iostream,并且实现了不同功能的cout等一些函数,那我在程序里面#include<iostream>的时候,内部发生了什么事情?当使用using namespace 我自己的名称空间的时候,内部又发生了什么?
我对这个比较困惑,希望高手解惑

[解决办法]
当然,include那句只是要包含必要的头文件啦。

using namespace std;为了避免变量名称的冲突,
使用命名空间,就相当于指定一个范围吧(作用域),只要这个范围内的变量名称不冲突,那就没事的。

如果你有变量名和std里的变量相同的话,如果用std::变量,也是没问题的,因为你是指定了的要调用std里的变量。不然的话,就是有冲突的。。


[解决办法]
标准库的东西都在std名字空间内
[解决办法]
命名空间实际上也称作可称作包(Java,UML等),
通俗点讲就是把把一组类装在一个包里,防止类名或函数名重名。
我们在写程序的时候可能建立千万个类(自己写的还有外来的类库),如果没有命名空间这个东西,那么所有的类都必须具有唯一的名称,使用也不便。 有了命名空间后,就可以“分门别类”地对类进行命名和调用
比如MFC库中有CString类,WTL中也有CStirng类,如果在一个程序中同时使用
这两种框架,那么如果你声明一个CString对象,编译器是不知道你要使用的是哪个CString类,
所以需要命名空间来区分。
std是标准库的命名空间,只要你使用标准库的类或函数,都必须加std.


[解决办法]
namespace std
{
//iostream 实现的东西
}
iostream头文件定义的东西都在 std命名空间内
[解决办法]
#include<iostream>
是STL独有的。
你可以试试在一个程序中同时包含
#include<iostream>
#include<iostream.h>
using spacename std;
然后尝试调用里面的一个ifstream类,你看会发生什么
[解决办法]
#include <iostream >只是加入头文件
在程序中使用里面的内容时才需要std解析。
[解决办法]
还不明白吗?
如果你使用#include<iostream>//注意没有.h,说明你调用了一个标准库的类
这个类是在std命名空间中的,也就是你说的iostream头文件定义的东西都在 std命名空间内。

通俗点讲,std 是一个房子,iostream是住在房子里的人
那么你要找iostream这个人是不是得去敲std 的门(using spacename std)?
从另一个角度讲,叫iostream 的人可能都成千上万,他们都在不同的房子里,
你到底要找哪一个只要敲对门就行了(using spacename XXX);

热点排行