0

每当我声明一个新变量时,比如下面的结构,我必须用 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,如果我不使用 初始化我的结构{},它将包含许多“垃圾”数据。

4

2 回答 2

4

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

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

于 2013-10-22T06:04:54.630 回答
1

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

于 2013-10-22T06:05:33.293 回答