我对c ++的范围有疑问。我的伙伴给我进行了实践测试,以帮助准备即将进行的技术考试,但我不确定如何回答一个问题。
我得到了代码片段
int nValue1 = 12, nTotal =0;
nTotal += nValue1;
{
int nValue1 = 14;
nTotal += nValue1;
}
nTotal += nValue1;
我需要复习示波器的原理,因为我不确定以下哪个答案是最好的。
A)当代码超出范围时,编译器会记住将其值恢复为12。
B)当代码超出范围时,将再次使用原始的nValue1。
我认为答案是B,是吗?
最佳答案
答案都不是。
没有“原始价值”,也没有什么可记住的。
它们是两个独立的独立变量。在内部范围内,符号nValue1
引用一个变量。在内部范围之外,符号nValue1
表示不同的变量。
即使在内部作用域内部,也可以修改外部作用域的nValue1
(通过指针或某些等效机制)。当内部作用域存在时,不会“记住” nValue1
具有与作用域之前相同的值,而是在内部作用域生效时间接地更新任何值。