1

问题一:

如何判断变量的默认值?那就是(如果我的词汇错了)变量在分配之前的值?

问题2:

这在编译器之间有何不同?

问题 3:

有没有更好的默认值方法?

问题4:

最后,这条规则还有其他例外吗?

示例代码:

bool foolean;
int fintoo;
double fooble;
char charafoo;

这些默认编译器到编译器是什么?

4

2 回答 2

8

在所有版本的 C++ 中,如果在命名空间范围内声明问题中的所有变量,它们都将被零初始化(静态)。在所有其他情况下,如果未初始化,它们将具有垃圾值。

请注意,垃圾值是位于定义变量的内存位置的任何值——它只是 0 和 1 的模式。您的程序不应读取此类值,否则您的代码将调用未定义的行为

在 C++11 中,如果将这些写为局部变量(或命名空间变量):

bool foolean {};
int fintoo {};
double fooble {};
char charafoo {};

它们是默认初始化的,在这种情况下意味着零(因为它们是内置类型)。

于 2013-07-27T19:35:53.063 回答
1

如果变量是自动的(即,static函数或其成员的局部非变量),则没有默认值。从实用的角度来看,变量是在堆栈上分配的,堆栈上的内容(可能是之前函数调用的剩余部分)将成为变量的值。

此外,一些编译器添加代码以在调试模式下将堆栈帧初始化为众所周知的值。这使您可以轻松地看到在调试时变量尚未初始化。

如果变量是静态的(在命名空间范围内声明,或static在函数中使用关键字),则默认值为 0。

于 2013-07-27T19:44:46.827 回答