当前位置:  开发笔记 > 编程语言 > 正文

C++ 11中类数据成员的默认初始化

如何解决《C++11中类数据成员的默认初始化》经验,为你挑选了0个好方法。

我对类数据成员的默认初始化感到困惑.这是示例代码.

#include 
#include 

class A {
public:
  int i;
  A() {}
};

A a1;
A aa1[3];
std::vector av1(3);

int main()
{
  A a2;
  A aa2[3];
  std::vector av2(3);
  std::cout << a1.i << " " << a2.i << std::endl;          // 0         undefined
  std::cout << aa1[0].i << " " << aa2[0].i << std::endl;  // 0         undefined
  std::cout << av1[0].i << " " << av2[0].i << std::endl;  // undefined undefined
}

在上面的代码中,只有a1.iaa1[0~2].i被初始化为0,而其他的是未初始化的.我不知道为什么会这样.

具体来说,我已经知道的是(来自"C++ Primer"):

初始化过程是:

a1并且a2默认初始化.

的每一个元素aa1,并aa2默认情况下初始化.

每个元素av1av2都被初始化了.

默认初始化的过程是:

检查变量是内置类型还是类类型.

对于内置类型,如果变量在任何函数体外,则将其初始化为0,否则该值未定义.

对于类类型,如果类具有默认ctor,则调用它,否则它是编译错误.

值初始化的过程是:

检查变量是内置类型还是类类型.

对于内置类型,它被初始化为0.

对于类类型,它是默认初始化的.(我认为这意味着如果该类具有默认的ctor,则调用它,否则它是编译错误.)

因此,当A::A()调用ctor时,数据成员如何A::i初始化(我猜它是默认初始化的)?为什么只有a1.iaa1[0~2].i被初始化为0,而其他人是未初始化的?

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有