C++ 编译器返回未初始化的值

C++ 编译器返回未初始化的值,c++,compiler-optimization,C++,Compiler Optimization,我有以下代码: #include <iostream> using namespace std; void funcA() { int a = 4; } void funcB() { int b; cout << b; } int main() { funcA(); funcB(); cout << endl; return 0; } #包括 使用名称空间std; void funcA()

我有以下代码:

#include <iostream>

using namespace std;


void funcA()
{
    int a = 4;
}

void funcB()
{
    int b;
    cout << b;
}

int main()
{
    funcA();
    funcB();

    cout << endl;

    return 0;
}
#包括
使用名称空间std;
void funcA()
{
INTA=4;
}
void funcB()
{
int b;

CUT< P>为了得到有用的警告,你必须请求它们。用<代码> -Walth-WOTAu/Cuth>选项运行GCC,并惊讶。C++中的

< P>编译器(没有警告标志)如果你不初始化值,就不会警告你。

如果你初始化一个变量,你实际上要做的就是分配x字节的数据(在本例中很可能是4字节)。因此,即使你没有初始化它,也会有“东西”

在这种情况下,它可能会重用
a
先前占用的内存块,这就是为什么在输出中会看到4


如果使用-03标志运行g++(最大的优化)所有值都初始化为0。这就是为什么您在输出中看到0。

这是未定义的行为。您得到的是您得到的,因为未定义的原因嗯,未定义的行为是未定义的,因此争论它是相当无用的。如果您想要警告,请启用警告。现在,我希望在这两种情况下…--不,未定义的行为是没有用的esn在你“期望”事情发生的地方不会这样工作。谢谢你的回答。我现在知道问题是什么了。(我不明白,尽管否决票很难找到这样的问题(未定义、未指定和实现定义的行为),请将其与我的标题进行比较。)如果你使用-03标志运行g++(最大的优化)所有值都初始化为0。这就是为什么您在输出上看到0。”那不是真的。是的,你是对的,g++没有将单位化值设置为0的标志。优化设置为高时,编译器可能不会为funcA发出代码,因为没有可执行语句。看到funcA没有任何用途,编译器或链接器可能会消除它。好的,谢谢!我看到了!