Main()函数中的默认初始化
Default initialization in main() function
#include <iostream>
using namespace std;
int main() {
int var; // default initialization var = 0 Why?
cout << var << endl;
return 0;
}
如果我理解正确的默认启动,则int变量必须是不确定的值。
默认初始化的效果是: 1)如果t是非pod(直到C 11)类类型,则考虑构造函数并对空参数列表进行过载分辨率。所选的构造函数(这是默认构造函数之一)被调用以提供新对象的初始值; 2)如果t是数组类型,则数组的每个元素都被默认为initialial; 3)否则,什么也没做:具有自动存储持续时间(及其子对象)的对象被初始化为不确定的值。
那么,为什么在这种情况下int var等于0?
您的理解是正确的。var
这里包含垃圾值,恰好是0
。
垃圾值不一定是某种看似随机值,通常是恰好在该内存中的值。再次运行您的程序,或更改其他编译器,可能会看到不同的结果。
相关文章:
- 使用 std::分配器在 constexpr 中进行默认初始化
- 为什么对象默认初始化,但基元不在C++?
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 默认初始化无法正常工作
- C++11默认初始化/值初始化/直接初始化
- make_shared是否对每个成员变量执行默认初始化(零初始化)
- 是否可以默认初始化具有已删除默认构造函数的类类型
- 对象成员数组C++默认初始化
- POD成员默认初始化无括号
- 如何在不使用 new 的情况下进行默认初始化
- 有没有办法欺骗 std::make_shared 使用默认初始化
- 枚举类默认初始化
- 是默认的构造函数和默认初始化
- 为什么在C 中不允许使用括号的默认初始化
- 默认初始化的含义在C 11中发生了变化
- Main()函数中的默认初始化
- WINHTTP_CURRENT_USER_IE_PROXY_CONFIG默认初始化
- 强制本地变量默认初始化
- 默认初始化混乱