学习《C++ primer》 的一个小疑问,关于using 声明的使用

别逗我乐 2009-05-27 09:24:41
《C++ primer》4th 中的 P79 ,下方原文:
2.使用标准库类型的类定义
有一种情况,必须总是使用完全限定的标准库名字:在头文件中。理由是头文件的内容会被预处理器复制到程序中。用#include包含文件时,相当于头文件中的文本将成为我们编写的文件的一部分。如果在头文件中放置using声明,就相当于在包含该头文件的每个程序中都放置了用一using声明,不论该程序是否需要using 声明。


我想问的是,
(1).我知道using声明重复使用,编译器没“ERROR”。那么using声明使用多了,有什么害处?
(2).“用#include包含文件时,相当于头文件中的文本将成为我们编写的文件的一部分。”那么using 指令比如using namespace std 做了什么事情呢?#include不是把相应的文件都包含了吗?为什么还要声明,哪个空间的哪什么呢?比如是std::cout;

请教大家,谢谢!
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuroc 2009-05-28
  • 打赏
  • 举报
回复
accelerated C++ 中 Chapter 4 中在声明头文件时,有具体说明。
自己找找
sandy_zc_1 2009-05-27
  • 打赏
  • 举报
回复
就是一个基本准则:头文件中不要用using namespace XXX这种声明。

因为很可能导致后来者的命名空间冲突。

举例:
假设某头文件中用到了cout,然后写这个头文件的人为了图方便,直接写了using namespace std
这样,相当于整个std命名空间里面的所有标识符都暴露在命名空间之外了。

之后某人在他的cpp中#include了这个头文件,他在他的cpp中写了如下:
struct vector
{
int X;
int Y;
};
....
然后编译,就会发现编译器报错:vector名字冲突了。因为std命名空间中已经有一个东西叫做vector了,于是冲突了。
但是此人很无辜的问:“我明明没有使用std命名空间啊??”————他不知道,原来是那个写头文件的人为了贪图一时方便,让他的cpp在不知情的情况下引用了std的命名空间,从而导致了这个错误。
ofcourseqi 2009-05-27
  • 打赏
  • 举报
回复
using namespace std 是用来声明名字空间的,名字空间和库文件是分开的!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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