You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++小作用域重声明同名变量后得到垃圾值的原因是什么?

C++代码输出异常原因

你遇到的是C++变量作用域遮蔽+声明生效时机共同导致的问题,具体逻辑如下:

  • 首先明确C++的变量声明规则:当你在某个作用域声明一个变量时,变量名会在声明符书写完成、初始化语句执行前就进入当前作用域,直接遮蔽外层作用域的同名变量。
    你的代码里内层块的int tar = tar;语句,当解析完int tar这部分之后,内层的tar变量名已经生效,外层初始化为0的tar已经被遮蔽了。所以等号右侧的tar指代的是刚声明、还未做任何初始化的内层tar本身。
  • 未初始化的局部变量存储在栈内存中,默认保留内存里的残留脏数据。你用未初始化的变量值给自己赋值,属于C++标准明确规定的未定义行为,输出的814005873就是栈内存里的随机脏值,每次运行结果都可能发生变化。

如果要实现用外层tar的值初始化内层变量,只要避免重名遮蔽即可,示例正确写法:

int tar = 0;
{
    int inner_tar = tar;
    cout << inner_tar;       
}

此时输出就是预期的0。

内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:06:03