cmu*_*use 13 c++ variables initialization c++-faq
在以下代码中,变量没有初始值并打印此变量.
int var;
cout << var << endl;
Run Code Online (Sandbox Code Playgroud)
输出:2514932
double var;
cout << var << endl;
Run Code Online (Sandbox Code Playgroud)
输出:1.23769e-307
我不明白这些输出数字.任何人都可以向我解释一下吗?
GMa*_*ckG 35
简而言之,var未初始化并且读取未初始化的变量会导致未定义的行为.
所以不要这样做.你做的那一刻,你的程序不再保证做你说的任何事情.
正式地,"读取"值意味着对其执行左值到右值的转换.并且§4.1声明"......如果对象未初始化,则需要进行此转换的程序具有未定义的行为."
实际上,这只意味着值是垃圾(毕竟,很容易看到读取int,例如,只是获取随机位),但我们不能得出结论,或者你将定义未定义的行为.
举一个真实的例子,考虑:
#include <iostream>
const char* test()
{
bool b; // uninitialized
switch (b) // undefined behavior!
{
case false:
return "false"; // garbage was zero (zero is false)
case true:
return "true"; // garbage was non-zero (non-zero is true)
default:
return "impossible"; // options are exhausted, this must be impossible...
}
}
int main()
{
std::cout << test() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
天真地,人们会得出结论(通过评论中的推理),这应该永远不会打印出来"impossible"; 但由于行为不明确,一切皆有可能.用它编译g++ -02.
当你这样做时:
int var;
您仅声明一个名为 的整数var。您没有使用值对其进行初始化,因此无论在什么位置var,都将是垃圾数据。
int var = 5;
将声明 var 并将其初始化为 5。
查看更多: http: //en.wikipedia.org/wiki/Uninitialized_variable