关于名字空间的问题

ftkghost 2004-09-23 12:48:12
声明名字空间用:
using namespace 名字空间名;
如果有两个名字空间nasp1,nasp2,名字空间中有同样名字的变量value;
如果我在程序中引用变量value;

using namespace nasp1;
using namespace nasp2;

下面引用变量value;
那编译器怎么知道在哪个名字空间?
是不是一定要用nasp1::value或nasp2::value来表明?
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2004-09-23
  • 打赏
  • 举报
回复
所以要有类似xml的名字空间的所写定义就好了。
qw2002qw 2004-09-23
  • 打赏
  • 举报
回复
大家已经说得很清楚了
aryak 2004-09-23
  • 打赏
  • 举报
回复
大家已经说得很清楚了
freshairfly 2004-09-23
  • 打赏
  • 举报
回复
同意楼上所说的
这和Java里的包的概念很像

当引入两个包(这里就是namespace)里有相同的元素时,需要在元素前加包名来修饰,否则就会ambigious
dot99 2004-09-23
  • 打赏
  • 举报
回复
还有,我个人觉得应该少使用uising namespace, 除非在有必要的时候,
namespace 像我写的一样变态
typedef ACTION_CODE::DATA_T::_MSG_DATA::_RULE_DATA RULE_DATA_T;
dot99 2004-09-23
  • 打赏
  • 举报
回复
namespace A {
int a;
}

namespace B {
int a;
}

using namespace A;
using namespace B;
//目前为止,正确
但是
a = 10; //二义性错误,使用变量不明确
这个时候,应该明确的指出namespace
A::a
或者
B::a
whyglinux 2004-09-23
  • 打赏
  • 举报
回复
>> 楼上的意思是不是当我使用using namespace时,所有声明的名字空间中的变量,函数,类等都类似在一个源文件中,同名变量造成污染?

就是这个意思。这样的话,对于同一个名子,编译器就不知道是哪一个库中的名子了。
dot99 2004-09-23
  • 打赏
  • 举报
回复
下面引用变量value;
那编译器怎么知道在哪个名字空间?

编译器会报告错误~~~~

二义性
roy 2004-09-23
  • 打赏
  • 举报
回复
系统区分不出,一定要加上域限定符
nasp1::value
nasp2::value
ftkghost 2004-09-23
  • 打赏
  • 举报
回复
楼上的意思是不是当我使用using namespace时,所有声明的名字空间中的变量,函数,类等都类似在一个源文件中,同名变量造成污染?
whyglinux 2004-09-23
  • 打赏
  • 举报
回复
对。这种情况下不能使用 using namespace 名字空间名;这种声明形式,因为它会把名子空间中所有的名子都会引入进来。如果两个名子空间中有相同的名子,就会造成冲突。
insulator 2004-09-23
  • 打赏
  • 举报
回复
如果你想在一段中使用一个名字空间可以直接在前面用using namespace nasp1;
如果想在这段程序中使用其它名字空间的变量时就要nasp2::value

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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