| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7556 人关注过本帖, 1 人收藏
标题:请教用include包含头文件和用using namespace将名字空间中定义的头文件中的 ...
只看楼主 加入收藏
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
结帖率:90.32%
收藏(1)
 问题点数:0 回复次数:13 
请教用include包含头文件和用using namespace将名字空间中定义的头文件中的符号的区别
在C++编程中我们经常使用include将一个头文件中声明的内容包含到当前文件中,也就是可以使用在include包含头文件中声明的符号。同样,我觉得使用using namespace也有类似的作用,但是为什么包含了符号声明的头文件,还有用using namespace使用名字空间呢?不是多此一举吗?当然,我知道我的理解不对,但我解释不了这两种用法的区别,请高手予以解答。
搜索更多相关主题的帖子: 声明 空间 include 
2012-04-14 17:51
ab1034982749
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:215
专家分:1185
注 册:2012-4-14
收藏
得分:0 
不用using namespace std;
则与处理要这样写:#include<iostream.h>
而用了using namespace std;
则要这样写:
#include<iostream>
using namespace std;
2012-04-14 18:43
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
我说如果是自己写的头文件,不是系统预定义的。
2012-04-14 18:49
wxl249424820
Rank: 2
等 级:论坛游民
帖 子:17
专家分:14
注 册:2010-2-6
收藏
得分:0 
首先要先区分#include<iostream> 和#include<iostream.h>;
这两个的区别就是后面一个没有一个有  .h  
#include<iostream>  为标准头文件。它是C++规范的带有命名空间的头文件,它包含在 std 命名空间内。
C++引入命名空间 namespace 就是为了减少和避免命名冲突。程序较大的时候就很难避免重名了。所以都要事先声明 用的是命名空间里的函数或者变量;
所以 要用 using namespace 。。
#include<iostream.h> 为非标准头文件。该头文件是C语言格式的,由于当时还没有“命名空间”个说法,借用2楼的例子,也就是说不存在std 这个命名空间标识符,所以用iostream.h 时也就用不着using namespace std;


我只是只菜鸟,,来学习的
2012-04-14 20:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
include 是包含进来, using 是用。包进来和用它还是有区别的。
程序代码:
#include <iostream>
using namespace std;

namespace my_namespc {
    int a = 5;
}

int main()
{
    int a = 1;
    cout << a << endl; 
    cout << my_namespc::a << endl; 

    using namespace my_namespc;
    cout << a << endl;

    return 0;
}
像这个例子,名空间就在本地,但你不 using 的话,还是不能自动就用的。

[ 本帖最后由 pangding 于 2012-4-15 00:58 编辑 ]
2012-04-15 00:54
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
回楼上:
我是不是可以这样理解您的意思,“包含”是指存在对象的声明(或定义),但是只有“用”它才能在包含的地方使用?也就是两个东西必须配合使用才行?关于#include 和using namespace 的确有不明晰的地方,一般书上也讲的不清不楚。
2012-04-15 11:06
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
2楼正解
2012-04-15 13:21
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
有了#include,可以支持你把源代码拆为成几个文件。#include本身应该只是把几个文件凑在一起给编译器看。而namespace是为了防止命名冲突和名字污染。

迭代的是人,递归的是神。
2012-04-15 15:27
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 6楼 hsnr
不是呀。我在 using 之前不是也通过 my_namespc::a 的方法使用了 my_namespc 里的内容了吗?

在 using 之前,就只能使全称(准确的说是要通过名空间限定的方法来引用)。using 语句有两种用法,一种是
using my_namespc::a;
一种是:
using namespace my_namespc;
前一种是声明,后文中的 a 指带的是 my_namespc 中的 a。
而后者是声明,后文中所用的所有标识符都先从 my_namespac 中查寻。相当于是把名空间中所有的东西都拉过来用。

我在置顶的 学习笔记 里也提到了一点有关名空间的东西,但内容不是很丰富就是了。那个帖子里,这两种用法都出现了。

[ 本帖最后由 pangding 于 2012-4-15 18:47 编辑 ]
2012-04-15 18:45
hsnr
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2010-4-4
收藏
得分:0 
回复9楼
我把您的程序运行了一遍,怎么第三个a输出也是1啊?费解哦。
2012-04-15 20:23
快速回复:请教用include包含头文件和用using namespace将名字空间中定义的头文件 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015854 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved