为什么可以在内部范围内重新使用实体? C ++

时间:2017-04-16 12:40:51

标签: c++

我想知道为什么一个实体可以在内部范围内重新使用?就像我在范围内声明变量x一样,我能够在内部范围内创建另一个完全相同的变量。计算机是否删除了外部实体的内存,然后用内部实体替换它?或者会发生什么?为什么甚至有机会这样做?到底有什么好处呢?这只会让我困惑

谢谢!我希望它解释得足够好

更新: 通过“实体”,我想我的意思是标识符。 令我困惑的一个例子是:

int main()
{
int x = 22;
int y = 33;

{
int x;
x = 44; //now it is another variable 
y = 55; //now y (outer scope) is changed

}
}

1 个答案:

答案 0 :(得分:1)

整个计算机并不十分关注您的变量和范围。你可能想说“编译器”。

不,编译器不会“删除外部实体的内存并将其替换为内部实体”。编译器为外部作用域中的x分配一个内存区域,为内部作用域中的x分配另一个内存区域,并且只知道当你在外部作用域时,{{ 1}}指的是内存的第一个区域,而当你处于内部范围时,x指的是第二个内存区域。所以,这一切都非常有效。

当发生这种情况时,我们会说内部x“遮蔽”外部x。 (有时您可能也会听到它被称为“面具”。)

当然,当您的内部范围终止时,x再次引用内存的第一个区域,因此没有删除任何内容。

关于这是否有用以及是否应该避免的意见不同。我认为这是有用和有益的,因为你在做阴影的是你说“x现在代表的是一个与它在外部范围内所代表的实体不同的实体”,而你因此,防止了从内部范围内意外地访问外部范围的实体。代码必须选择的变量越少越好。