我知道C和C++中的局部变量不会自动初始化,如果没有给它们提供初始值,它们将具有垃圾值。我也知道全局和静态变量默认情况下初始化为零。使用未初始化的变量会导致C++中出现未定义的行为。
但是最近我尝试在C++的各种实现上遵循简单的C++程序,所有输出都给我0。
#include <iostream>
int main()
{
int u;
std::cout<<u<<'\n';
}
输出:
CodeBlocks 13.12 IDE:0
Orwell开发C++ 5.8.3:0
Ideone.com:0(访问此地址:http://ideone.com/zWrgwo)
现代编译器会自动将局部变量初始化为0吗?还是这类程序仍然代表未定义的行为?是否可以确保始终在每个现代C++实现中将0视为输出?
最佳答案
特定的实现可以自由地不将它们(“局部”变量)设置为任何值,也可以将它们设置为所需的任何值,包括零。毕竟,标准没有要求将它们设置为非零值:-)
该标准仅声明其值(如果未明确设置)是不确定的。因此,这不是一个好的程序员所依赖的东西。这在C++11 8.5 Initializers [dcl.init] /11
(我的重点)中有所介绍:
因此,在回答您的最后一个问题is it guaranteed to see 0 as output on every modern implementation of C++ always?
时,答案是否定的,简单明了。
顺便说一句,您可能会发现,您在ozt_code,CodeBlocks
和DevC++
上测试过的三个“分离”环境都在幕后使用了相同的编译器,因此在这种情况下,这几乎不是一个详尽的测试。
关于c++ - 现代C++编译器会自动将局部变量初始化为0吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30596984/