在下面的程序中,如何从C区块A中检索aa的值? 我们只能使用范围解析运算符访问最外层的全局aa。
已知的solutoins: 1.在不同的块中使用不同的指针 2.在使用当前块的变量
之前,使用父块中的变量我正在寻找任何其他替代解决方案
我知道这不是好代码。只是好奇了解如何实现它。
#include <iostream>
#include <cstdio>
using namespace std;
// Global
int aa = 10;
int main()
{
// Main
int aa = 20;
{
// Block A
int aa = 30;
{
// Block B
int aa = 40;
{
// Block C
int aa = 50;
cout << "block C " << aa << endl;
cout << "block A " << ????? << endl;
cout << "global" << ::aa << endl;
}
cout << "block B " << aa << endl;
}
cout << "block A " << aa << endl;
}
cout << "main " << aa << endl;
return 0;
}
答案 0 :(得分:3)
我知道这不是好代码。只是好奇了解如何实现它。
你不能。
变量aa
的未修改使用将使用最近范围内的变量
装饰使用变量::aa
将使用函数外部范围内的变量
装饰使用变量<NS>::aa
将使用名称空间<NS>
范围内的变量。
答案 1 :(得分:0)
使用参考。
// Block A int aa = 30; auto& ref_aa = aa; { // Block B int aa = 40; { // Block C int aa = 50; cout << "block C " << aa << endl; cout << "block A " << ref_aa << endl; cout << "global" << ::aa << endl; } cout << "block B " << aa << endl; }
当然,那是毫无意义的;如果你可以修改代码,那么只需更改变量名称,或者重构它,以便需要更少的块(例如,使用更多的函数)。