为什么VS Compiler不会在C ++上自动初始化局部变量?

时间:2013-10-22 06:02:17

标签: c++ visual-studio-2012

每当我声明一个新变量时,就像bellow结构一样,我必须用0来初始化它。所以,我的问题是,有任何可能的情况,我不希望我的变量被初始化?

MY_STRUCT msVar1; //May have some trash data from old stack values.
MY_STRUCT msVar2 = {}; //Will have only 0's, which is a "clean" variable.

我试图在许多可能的场景中考虑我需要将我的变量初始化为0,但我无法...

我的意思是,如果我在初始化时没有设置任何值,它会自动用0填充它不是更好吗?

MY_STRUCT msVar1; //If I don't set any initialization value, auto fill it with 0's
MY_STRUCT msVar2 = {10, 20}; //Now I've specified a initialization value, so doesn't need to auto fill.

实际上我正在使用Visual Studio 2012,如果我不使用{}初始化我的结构,它将包含许多“垃圾”数据。

2 个答案:

答案 0 :(得分:4)

这不仅仅是Visual Studio。语言C ++指定变量(有一些例外)未初始化,因此它们将包含垃圾直到初始化或分配。

应该可以用C ++编写非常高性能的代码,并且要求编译器必须添加额外的代码(并不总是需要),这可能会减慢其中一些程序的速度。

答案 1 :(得分:1)

因为C ++标准说访问未初始化的值会导致未定义的行为。如果编译器发出的代码将结构清零,编写性能敏感代码的人就会不高兴。