C ++构造函数语法和零初始化

时间:2015-10-31 08:23:54

标签: c++ c++11 syntax

这是一个关于c ++语法的简短问题:

class arrayInit {
 public:
  bool vars[2];

  arrayInit() : vars() {} //1
};

class array {
 public:
  bool vars[2];
  array() {} //2
};

1和2有什么作用?

为什么他们不会像这样初始化为零:bool vars[2]={};

arrayInit() :array()的目的是什么?什么叫它所以我可以搜索它?

来自:https://msujaws.wordpress.com/2010/06/16/initializing-an-array-in-c/

3 个答案:

答案 0 :(得分:5)

  

1和2有什么作用?

1和2都为相应的类型

定义默认构造函数
  

为什么他们不像这样零初始化:bool vars [2] = {};?

如果他们使用的是支持c ++ 11的编译器,他们就可以了。 var()将值初始化与vars相同的数组[2] = {}将显式初始化所有元素为false

  

arrayInit():和array()的目的是什么?还有,这是什么   这样叫我可以搜索一下吗?

它们被称为默认构造函数。 C ++编译器将为您创建它们,除非您想要在它们中做一些特殊的事情。如果你提到的是超出:(冒号)的内容,那个表达式被称为初始化列表

了解更多here

答案 1 :(得分:2)

  

1和2做什么?

两者都允许您覆盖数组的默认初始化。 InitArray专门初始化没有参数的vars数组,我相信它会假设0作为默认参数。 Array没有专门初始化数组,因此它回退到默认的初始化情况。

  

为什么他们不像这样零初始化:bool vars [2] = {};?

你可以这样做,这只是另一个选项,它将bool数组封装在一个类中,以便你可以提供其他功能。

  

arrayInit()的目的是什么:和array()?

如果需要默认功能,则无需将数组封装在自己的类中。封装允许您封装类型以提供默认的不同功能,您可以继续添加加法,减法或任何您可以想到的方法,并让它以您指定的方式执行方法。

  

它叫什么,所以我可以搜索它?

好问题;封装,类初始化,数组初始化。     

http://www.cplusplus.com/doc/tutorial/classes/
    

答案 2 :(得分:1)

arrayInit()array()都是默认构造函数。如果缺少默认构造函数并且其他构造函数可用,则不能在不调用其他构造函数的情况下从该类类型声明对象,例如没有默认构造函数,你不能这样做arrayInit arr;

部分: vars()称为初始化列表。您可以在此链接中详细了解这些内容:http://en.cppreference.com/w/cpp/language/initializer_list