嵌套作用域中的变量何时从内存中销毁?

发布于 2025-01-16 05:14:54 字数 225 浏览 0 评论 0原文

void main() {
    int x=5;
    {
        int x= 6; 
        cout<<x;
    }
    cout<<x;
}

输出是 6, 5。

我的问题是:当将 x 赋值给 6 时,它为它保留了一个内存单元,然后进入这里的嵌套块(旧的 x 被破坏了!或者它如何为同一个变量定义两个变量)姓名?

void main() {
    int x=5;
    {
        int x= 6; 
        cout<<x;
    }
    cout<<x;
}

the output is 6, 5.

My question is: when Assign x to 6, it reserved a memory cell for it, and then entered the nested block here( the old x is destroyed!! Or how it can defined two variables for the same name?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生寂 2025-01-23 05:14:54

如何定义两个同名变量?

您的示例中的两个 x 存在于不同的作用域中。当您定义内部x时,它会在外部范围中隐藏x。请参阅下面给出的程序中的注释。

int main()
{//---------------------------->scope1 started here
//------v---------------------->this variable x is in scope1
    int x=5;  
    {//------------------------>scope2 started here
//----------v------------------>this variable x is in scope2
        int x= 6;
//------------v---------------->this prints scope2's x value        
        cout<<x;
    }//------------------------>scope2 ends here and x from scope2 is destroyed
//--------v---------------->this prints scope1's x value   
    cout<<x;
}//---------------->scope1 ends here

此外,内部作用域 x 会在该作用域结束时被销毁。而且,内部作用域x和外部作用域x在内存中占用不同的地址。

上述程序的输出为 65,可以在此处查看。


另外,请注意,void main() 不是标准 C++,您应该将其替换为 int main(),如上面的代码片段所示。

how it can defined two variables for the same name?

The two x in your example exists in different scopes. When you defined the inner x, it hides the x from outer scope. See the comments in the below given program.

int main()
{//---------------------------->scope1 started here
//------v---------------------->this variable x is in scope1
    int x=5;  
    {//------------------------>scope2 started here
//----------v------------------>this variable x is in scope2
        int x= 6;
//------------v---------------->this prints scope2's x value        
        cout<<x;
    }//------------------------>scope2 ends here and x from scope2 is destroyed
//--------v---------------->this prints scope1's x value   
    cout<<x;
}//---------------->scope1 ends here

Also, the inner scope x is destroyed when that scope ends. Moreover, the inner scope x and outer scope x occupy different addresses in memory.

The output of the above program is 65 which can be seen here.


Additionally, note that void main() is not standard C++, you should instead replace it with int main() as shown in my above snippet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文