全局、局部、嵌套局部变量同名时,如何访问外层局部变量?
访问外层嵌套局部变量的解决方案
好问题!在C++里,确实没有像访问全局变量用::那样的直接语法来跳过当前块的局部变量,访问外层嵌套的局部变量。不过我们可以用一个简单的技巧来实现这个需求——提前保存外层局部变量的引用或者指针。
具体实现代码
#include <iostream> using namespace std; int i = 1; int main() { int i = 2; // 提前保存外层局部变量i的引用 int& outer_local_i = i; { int i = 3; cout << outer_local_i << endl; // 输出2,也就是外层局部变量的值 cout << ::i << endl; // 输出1,全局变量 cout << i << endl; // 输出3,当前块的局部变量 } system("pause"); return 0; }
原理说明
当内层块定义了同名变量i时,它会遮蔽外层的局部变量i——此时在块内直接写i只会指向当前块的局部变量,也没有语法可以直接“向上跳一层”访问外层的局部变量。
所以我们需要在内层变量定义之前,把外层的局部变量用引用(或者指针)存下来,之后在内层块里通过这个引用/指针就能访问到外层的局部变量了。
内容的提问来源于stack exchange,提问作者Japun Japun
相关产品推荐
相关产品推荐

