块作用域内外变量访问问题:xy、xt、xs访问行为差异咨询
C++块作用域变量访问问题解答
嘿,我来帮你拆解这个问题的核心原因,其实都是变量作用域在搞鬼!
先把你的代码完整贴出来方便分析:
#include <iostream> using namespace std; int main() { int xy=10; int xt=11; int xs=33; { int xy; xy=22; xt=12; xs=23; cout<<xy<<" "<<xt<<" "<<xs<< endl; } cout<<xy<<" "<<xt<<" "<<xs<< endl; }
为什么三个变量表现不一样?
我们逐个拆解:
- 关于
xy:你在内部的{}块里重新声明了int xy;,这触发了C++的**变量隐藏(shadowing)**机制。简单说,这个内部的xy是一个全新的、仅在当前块内生效的变量,和外层main函数里的xy完全是两个独立的“容器”。所以块内给xy赋值22,操作的是这个新容器,输出自然是22;当代码跳出这个块后,内部的xy会被销毁,外层的xy还是原来的10,因此块外输出10。 - 关于
xt和xs:你在内部块里没有重新声明这两个变量,代码里的xt=12和xs=23直接操作的是外层main函数里的原变量——相当于直接修改了原来“容器”里的内容。不管是在块内还是块外,访问的都是同一个变量,所以块内输出修改后的12和23,块外也会输出这两个值(因为外层变量已经被改动了)。
一句话总结
如果在内部作用域声明了和外部同名的变量,内部会优先使用自己的变量;如果不声明,就直接调用外部变量,对它的修改也会同步影响外部。
内容的提问来源于stack exchange,提问作者Roma Sovach
相关产品推荐
相关产品推荐

