这个问题已经在链接中讨论过了 命名命名空间中的未命名命名空间,但没有提供有关如何访问嵌套在命名命名空间下的未命名命名空间的变量的完美答案,以防两个变量相同
考虑此代码
namespace apple {
namespace {
int a=10;
int b=10;
}
int a=20;
}
int main()
{
cout<<apple::b; //prints 10
cout<<apple::a; // prints 20
}
未命名的命名空间"variable a"
始终处于隐藏状态。如何访问未命名命名空间的"variable a"
?
在命名命名空间中声明未命名的命名空间是否合法?
未命名的命名空间
"variable a"
始终处于隐藏状态。如何访问未命名命名空间的"variable a"
?
看起来您根本无法限定封闭命名空间之外的未命名命名空间。
好吧,这是解决歧义的方法:
namespace apple {
namespace {
int a=10;
}
int getPrivateA() {
return a;
}
int a=20;
}
int main() {
cout<<apple::getPrivateA() << endl;
cout<<apple::a << endl;
}
观看现场演示。
虽然我知道这并不能完全回答您的问题(除了将未命名的命名空间嵌套在另一个命名空间中是否合法(。
我将不得不在 3.4 和 7.3 章中进一步研究 c++ 标准规范的内容,以便给您一个明确的答案,为什么不可能实现您想要做的事情。
我前几天读了这篇文章,并对"如何访问未命名命名空间的"变量 a"有一个答案?
我完全回答这个问题,知道这不是一个完美的答案,但这是一种从未命名命名空间访问"a"的方法。
#include <iostream>
#include <stdio.h>
namespace apple {
namespace {
int a=257;
int b=10;
}
int a=20;
}
using namespace std;
int main() {
int* theForgottenA;
// pointer arithmetic would need to be more modified if the variable before
// apple::b was of a different type, but since both are int then it works here to subtract 1
theForgottenA = &apple::b - 1;
cout << *theForgottenA; //output is 257
}