我对c ++的范围有疑问。我的伙伴给我进行了实践测试,以帮助准备即将进行的技术考试,但我不确定如何回答一个问题。

我得到了代码片段

int nValue1 = 12, nTotal =0;
nTotal += nValue1;
{
    int nValue1 = 14;
    nTotal += nValue1;
}
nTotal += nValue1;


我需要复习示波器的原理,因为我不确定以下哪个答案是最好的。

A)当代码超出范围时,编译器会记住将其值恢复为12。

B)当代码超出范围时,将再次使用原始的nValue1。

我认为答案是B,是吗?

最佳答案

答案都不是。

没有“原始价值”,也没有什么可记住的。

它们是两个独立的独立变量。在内部范围内,符号nValue1引用一个变量。在内部范围之外,符号nValue1表示不同的变量。

即使在内部作用域内部,也可以修改外部作用域的nValue1(通过指针或某些等效机制)。当内部作用域存在时,不会“记住” nValue1具有与作用域之前相同的值,而是在内部作用域生效时间接地更新任何值。

10-08 02:46