【问题标题】:Default initialization in main() function [duplicate]main() 函数中的默认初始化
【发布时间】:2016-06-15 03:27:00
【问题描述】:
#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 是数组类型,则数组的每个元素都是默认初始化的; 3) 否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。

那么,为什么 int var 在这种情况下等于 0?

【问题讨论】:

  • 是的,它是不确定的值。尝试输出不确定的值会导致未定义的行为。未定义的行为意味着任何事情都可能发生。打印 0 是“任何东西”的一种可能情况。

标签: c++ initialization


【解决方案1】:

你的理解是正确的。 var 这里包含垃圾值,恰好是0

垃圾值不一定是一些看似随机的值,通常它是恰好在那个内存中的值。再次运行你的程序,或者换一个不同的编译器,你可能会看到不同的结果。

【讨论】:

  • 不赞成。该网站上有大量重复项,链接比回答更好
  • 这里OP知道默认初始化的规则。他只是误解了0 可能是垃圾值的一种可能值。我没有找到回答这个特定问题的副本。
猜你喜欢
  • 2012-08-25
  • 2017-11-19
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多