C++局部变量必须初始化?

C++中局部变量必须先主动初始化,但下面的代码会输出0 ,不知为何?

#include<iostream>
using namespace std;

int main(){
    int a;
    cout << a << endl;
    return 0;
}
阅读 6.8k
3 个回答

C++局部变量必须先初始化,否则其内存上的值是未知的,若是前面用过这块内存且未消除这块内存上的值,则此时会读取到上次的值。
此外不同编译器对未初始化的局部变量会有不同的处理,比如上面的

#include<iostream>
using namespace std;

int main(){
    int a;
    cout << a << endl;
    return 0;
}

在vs2017之前会输出0,在vs2017及之后会报错——C4700使用了未初始化的局部变量‘a’。即使有的编译器会把未初始化的局部变量赋值为0但是我们依旧要保持给所有局部变量初始化的好习惯,避免一些意外错误。

不是必须初始化, 只是未初始化前是 内存中原来的值, 输出0 只是因为那块a的空间碰巧原来的数据是0而已, 再运行就不一定了

未初始化标准没有定义,每个编译器处理策略不一样,即使是同一个编译器不同版本策略也可能不一样。有些编译器不同优化等级也不一样。你直接当成随机值看就好了,只不过恰巧是0罢了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题