当前位置:  开发笔记 > 编程语言 > 正文

使用名称范围

如何解决《使用名称范围》经验,为你挑选了1个好方法。

我尝试了下面这段代码.当我编译时,我得到错误,那里有first_var的模糊实例,而我在最后一个cout之前引入了使用命名空间second_space

我想这是因为最后一个cout使用两个名称空间.命名空间没有覆盖概念?无论如何,命名空间范围可以结束,还是从使用命名空间点继续到文件末尾?

#include
namespace first_space{
    int first_var;
}
namespace second_space{
    int first_var = 1;
}
int main()
{
    cout<<"Hello World"<

编辑1:

我在下面尝试过类似的东西.声明在main中具有相同名称的变量,为其分配值1,然后使用下面的命名空间使用.但是我看到,first_var的值在最后两个cout中打印为1.这里没有歧义.那么命名空间没有任何影响?为什么会这样?

#include
namespace first_space{
    int first_var;
}
namespace second_space{
    int first_var = 1;
}
int main()
{
    int first_var =1 ;
    using namespace first_space;
    cout<<"Hello World"<

输出:

Hello World
First Namespace Variable using namespace identifier:0
First Namespace Variable using using identifier:1
Second Namespace Variable using using identifier:1

CoryKramer.. 5

是的,你是正确的,在第二个using语句之后,变量first_var现在是不明确的,因为就名称查找而言,两个名称空间都是有效的并且具有相同的优先级.

这两个解决方法是

a)添加大括号以强制执行匿名范围(现场演示)

{
using namespace first_space;
cout << "First Namespace Variable using using identifier:" << first_var << endl;
}

{
using namespace second_space;
cout << "Second Namespace Variable using using identifier:" << first_var << endl;
}

b)删除using关键字并直接使用命名空间范围

cout << "First Namespace Variable using using identifier:" << first_space::first_var << endl;
cout << "Second Namespace Variable using using identifier:" << second_space::first_var << endl;

我个人会选择b.首先添加名称空间的主要原因之一是避免歧义问题,因此用一堆using语句污染当前作用域会破坏这一点.



1> CoryKramer..:

是的,你是正确的,在第二个using语句之后,变量first_var现在是不明确的,因为就名称查找而言,两个名称空间都是有效的并且具有相同的优先级.

这两个解决方法是

a)添加大括号以强制执行匿名范围(现场演示)

{
using namespace first_space;
cout << "First Namespace Variable using using identifier:" << first_var << endl;
}

{
using namespace second_space;
cout << "Second Namespace Variable using using identifier:" << first_var << endl;
}

b)删除using关键字并直接使用命名空间范围

cout << "First Namespace Variable using using identifier:" << first_space::first_var << endl;
cout << "Second Namespace Variable using using identifier:" << second_space::first_var << endl;

我个人会选择b.首先添加名称空间的主要原因之一是避免歧义问题,因此用一堆using语句污染当前作用域会破坏这一点.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有