c++中头文件和命名空间的问题

书上说c++标准库函数和类是在标准命名空间中声明的,命名空间是既能定义又能声明的吗;写程序时为什么既要用#include包含标准库又要using标准命名空间,既然包含了头... 书上说c++标准库函数和类是在标准命名空间中声明的,命名空间是既能定义又能声明的吗;写程序时为什么既要用#include包含标准库又要using标准命名空间,既然包含了头文件,预编译时不是就会把头文件中的所有东西就会拷贝到当前文件中吗,此时已经包含了命名空间中声明的那些东西,并且已经是头文件中定义过的,不是就不需要命名空间的声明了吗,拷贝到过来之后那些类啊函数啊的作用域已经是当前文件了。不懂,求大神解答 展开
 我来答
jackys2007
2012-10-20 · TA获得超过1913个赞
知道小有建树答主
回答量:828
采纳率:100%
帮助的人:929万
展开全部
这个可以这样理解:
假如有两个软件公司A公司和B公司,他们都是用C++语言开发他们的产品。那么,他们分别编写了a.h和b.h两个自己的头文件,这两个文件中都有一个叫func()的函数。他们各自使用也没什么问题。

假设你公司也是一个软件公司,你现在要开发一个软件,必须同时用到A公司和B公司的头文件,同时会调用他们的func()函数。这个时候问题就来了,你调用的func()函数,编译器不知道应该选用A公司的还是B公司的。为解决这个问题,C++采用了命名空间,这样,你调用A公司的func()函数,就使用A::func(),B公司亦然。

这个东西初学者不容易理解,不过理解了上面这个例子就马上明白了。只是一种资源的管理方式而已。
arongustc
科技发烧友

推荐于2017-11-25 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6016万
展开全部
1. 预编译时不是就会把头文件中的所有东西就会拷贝到当前文件中吗
错误,不会拷贝
2. 写程序时为什么既要用#include包含标准库又要using标准命名空间,
using关键字有点误导,实际上它只是省了你写std::cout之类的,即使你不用using,你一样可以用标准库里的东西,只是要加std::前缀
更多追问追答
追问
1,预编译时头文件不拷贝是怎么进行的 2,你说的我知道,我是在拷贝进来的前提下,已经有cout的定义了,按照c语言前面有定义了后面就可以直接用了,根本不需要声明,为什么还要使用标准命名空间(标准命名空间生命了头文件中库函数的类和函数)而不是你说的using问题
追答
1. 编译器依次打开各个文件,扫描内容
2. 你所谓的不需要声明,到底时哪个声明?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2020-04-22
展开全部
所以说,1 名称空间相当于对头文件/库文件里的函数建了一个分类目录,把不同的函数分到不同类别或者不同级的空间中避免名称的冲突?
2 而名称空间是在头文件中实现的?
3 函数定义在库文件中以编译后的二进制形式存在;而函数声明在头文件中以可读的代码实现,并且是以名称空间的层级进行组织的?
4 在#include头文件后,在名称空间中定义的变量或者声明的函数,仍然在只有使用using声明或者编译指令或者作用域解析运算符::后才可以使用?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深邃的遥望
2013-03-23
知道答主
回答量:2
采纳率:0%
帮助的人:2272
展开全部
你懂了吗?我也对你说的问题有疑问,能说说是怎么回事吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式