首页 > 解决方案 > 为什么在较小范围内声明变量后我得到垃圾值

问题描述

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

它打印出 814005873,但我期望的是 0。

标签: c++

解决方案


外部范围内的变量不相关。你会得到同样的结果

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

tar未初始化,因此使用其值来初始化自身是未定义的行为。所有主要编译器都警告这种tar未初始化使用的情况。例如:https ://godbolt.org/z/3x437P46K 。不要忽视警告!

这不是错误可能看起来很奇怪,但对于自定义类型,这样的初始化可能是有意义的。例如:

struct foo {
    foo& other;
    foo(foo& other) : other(other) {}
};

int main()
{
    foo f = f;
}

f持有对自身的引用。


推荐阅读