关于std、cin、cout

代码研究所 2012-11-04 11:51:13
std是命名空间我知道,但是std是不是包含在iostream库里面的?

书上说库包含在命名空间里,是什么意思?

cin和cout是标准库里的还是std命名空间的里的?

为什么编程时只导入一个标准库,但还要指定使用哪个命名空间,难道C++默认有多个命名空间?

问题比较多,我给了80分。
...全文
347 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyoucan 2014-04-14
  • 打赏
  • 举报
回复
我也有点晕。
dorisdoris123 2012-11-09
  • 打赏
  • 举报
回复
iostream是在命名空间std里面,不是std在iostream里面 每个库中的变量和类声明和定义时都在一个namespace std {};中,使用时都要加std::才能引用 cin和cout也是在iostream.h里面定义的吧
Super6K 2012-11-08
  • 打赏
  • 举报
回复
引用 1 楼 hnwyllmm 的回复:
iostream是在命名空间std里面,不是std在iostream里面 每个库中的变量和类声明和定义时都在一个namespace std {};中,使用时都要加std::才能引用 cin和cout也是在std里面定义的 虽然STL只有一个std命名空间,但是使用时仍然要指定,同时,楼主自己也可以命名一个变量与STL的某个变量相同,命名空间,就可以区分到底是哪个下面的库了
1楼正解,其实命名空间是为了应对巨大项目中名称不够用的情况,在不同的命名空间中可以声明相同名称不同功能的方法。楼主说的iostream其实就是std里面的,你可以把std当成一个屋子,屋子里有好多家具,这些家具就是一些库和方法一类的东西。同样,可能还有别的屋子,比如你可以自己写一个stdd 这样,在stdd空间中就就可以放一些同样名称的东西。指定命名空间是因为,程序并不知道是否存在同样名称的库或者方法,指明哪个命名空间中的东西可以精确的找到,防止万一出现的同名情况。
qin_zhu 2012-11-06
  • 打赏
  • 举报
回复
主要就是为了避免命名冲突,使用方法看下面(MyPlugin是一个命名空间):

namespace MyPlugin
{
	class CPlugin_U7Meeting_AVInfo :
		public IPlugin_U7Meeting_AVInfo
	{
	public:
		CPlugin_U7Meeting_AVInfo(void);
		~CPlugin_U7Meeting_AVInfo(void);
         .................

	};
}
ForestDB 2012-11-06
  • 打赏
  • 举报
回复
库就是库,基本上可以看成是一组对象cin和函数printf和类ifstream的集合,但是不管是对象/函数还是类,它总有个名字,是名字就有可能有冲突,所以才有命名/名字空间这么一说,这样一来,相同的名字在不同的空间下,表示了不同的东西,解决了冲突。名字空间只是名字的集合,库是对象,函数,类的集合,就是这样。 可以认为namespace是个容器,用来装名字的,不同的库的名字可以装在一起的,最典型的就是C++的std,其中有C库(std::printf),C++库如IO(std::cout << std::endl),还有STL(std::vector). std是命名空间我知道,但是std是不是包含在iostream库里面的? // 所以说,不是,这两者不存在包含关系 书上说库包含在命名空间里,是什么意思? // 是指库的东西的名字,包含在namespace中 cin和cout是标准库里的还是std命名空间的里的? // 它们是标准库的内容,名字在std中。 为什么编程时只导入一个标准库,但还要指定使用哪个命名空间,难道C++默认有多个命名空间? 如果你还用过其他的C++库比如boost,那么写程序的时候就会是: using namespace std; using namespace boost;
BadPattern 2012-11-05
  • 打赏
  • 举报
回复
变量如果同名怎么办?只要它们属于不同的函数就行,函数如果同名怎么办?除了重载只要它们属于不同的类就行,类名如果重复怎么办?这就需要命名空间来帮忙区分了。
BadPattern 2012-11-05
  • 打赏
  • 举报
回复
C++ primer到后面才大概提了一下命名空间,搞的一开始我也云里雾的,有了命名空间机制,库可以属于某个命名空间,更大程度上杜绝了名称的重复。
薛定谔之死猫 2012-11-05
  • 打赏
  • 举报
回复
名称空间是为限定名称的,就当作是追加名称前缀用于区分好了,缺省的名称空间是不指定或使用using指定了空间~
代码研究所 2012-11-05
  • 打赏
  • 举报
回复
引用 2 楼 JiMoKuangXiangQu 的回复:
采用命名空间的方法,可以避免一些名字冲突. 如你定义一个名为mynamespace的命名空间,可以在其中定义一个和标准库相同名字的函数,如cout,那么你引用的时候可以用 mynamespace::cout来使用. 建议lz多看书,可以获得更全面系统的了解.
我正在看C++ Primer
JiMoKuangXiangQu 2012-11-04
  • 打赏
  • 举报
回复
采用命名空间的方法,可以避免一些名字冲突. 如你定义一个名为mynamespace的命名空间,可以在其中定义一个和标准库相同名字的函数,如cout,那么你引用的时候可以用 mynamespace::cout来使用. 建议lz多看书,可以获得更全面系统的了解.
羽飞 2012-11-04
  • 打赏
  • 举报
回复
iostream是在命名空间std里面,不是std在iostream里面 每个库中的变量和类声明和定义时都在一个namespace std {};中,使用时都要加std::才能引用 cin和cout也是在std里面定义的 虽然STL只有一个std命名空间,但是使用时仍然要指定,同时,楼主自己也可以命名一个变量与STL的某个变量相同,命名空间,就可以区分到底是哪个下面的库了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧