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

C++ 为什么一个实体可以在内部范围内重新使用?C++;,c++,C++,我想知道为什么一个实体可以在内部作用域中被重用?就像我在一个范围内声明了变量x,那么我就可以在一个内部范围内创建另一个变量,并且使用完全相同的变量。计算机是否删除外部实体的内存,然后将其替换为内部实体?或者发生了什么?为什么有这样的机会呢?它有什么好处?这只会让我困惑 谢谢!我希望解释得足够好 更新: 我想我所说的“实体”是指标识符。 让我困惑的一个例子是: int main() { int x = 22; int y = 33; { int x; x = 44; //now it is an

我想知道为什么一个实体可以在内部作用域中被重用?就像我在一个范围内声明了变量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

}
}

作为一个整体,计算机并不十分关心变量和作用域。你可能想说“编译器”

不,编译器不会“删除外部实体的内存并用内部实体替换”。编译器在外部作用域中为
x
分配一个内存区域,在内部作用域中为
x
分配另一个内存区域,并且只知道当您在外部作用域中时,
x
指代第一个内存区域,而当您在内部作用域中时,
x
表示内存的第二个区域。因此,这一切都相当有效

当这种情况发生时,我们说内部的
x
“阴影”外部的
x
。(有时你也会听到它被称为“面具”。)

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


对于这是否有益,是否应该避免,意见分歧。我相信它是有用和有益的,因为你对阴影所做的是,你在说“名称
x
现在代表的实体不同于它在外部作用域中所代表的实体”,因此防止你从内部作用域意外访问外部作用域的实体。代码选择的变量越少越好。

您所说的“实体”是什么意思?你能添加一些(伪)代码来说明你的意思吗?是的,等等……它们是两个不同的变量,恰好有相同的名称。内部x的阴影笼罩着外部x。“为什么有这样的机会?”——可能是历史原因。首先,这种事情首先出现在AlgOL中,它发明了范围,是从C中复制的,因此仍然允许在C++中使用。看@Carcigenicate嗯,你可能是对的。我会修改的。是的,我指的是编译器,谢谢!哇,现在知道它是如何工作的对我来说更有意义,也很奇妙。非常感谢你!!就像我把我刚出生的儿子叫做“边界强加”,我不会神奇地消失。它只是意味着上下文决定了当你使用这个名字时你指的是我们中的哪一个。