如何使用作用域解析访问未命名的命名空间?



我有这个:

#include <iostream>
using namespace std;
// Variable created inside namespace
namespace first
{
int val = 500;
}
namespace
{
int val = 400;
}
// Global variable
//int val = 100;
int main()
{
// Local variable
int val = 200;
// These variables can be accessed from
// outside the namespace using the scope
// operator ::
cout << first::val << 'n'; 
cout << ::val << 'n'; 
cout << val << 'n'; 
return 0;
}

本例中的::val将提供val = 400。但是,如果我删除对全局变量的注释,那么::val将到达全局命名空间。那么,在这种情况下,如何访问未命名的名称空间呢?

int val = 400;

这是带有

的输出
// Global variable
int val = 100; //Not commented.
500
100
200

一个可能的解决方案是通过引用"hidden"来扩展未命名的名称空间。变量:

#include <iostream>

// Variable created inside namespace
namespace first
{
int val = 500;
}
namespace
{
int val = 400;
}
// Global variable
int val = 100;
namespace {
int& access_to_val=val;
}
int main()
{
using namespace std;
// Local variable
int val = 200;
// These variables can be accessed from
// outside the namespace using the scope
// operator ::
cout << first::val << 'n'; 
cout << ::val << 'n'; 
cout << val << 'n';
cout << access_to_val << 'n'; 
return 0;
}

与Godbolt核对代码。

程序的输出是:

500
100
200
400

作为旁注:避免在标题中使用using namespace std

相关内容

  • 没有找到相关文章

最新更新