它在构造函数声明中意味着什么

时间:2011-07-15 16:46:28

标签: c++

  

可能重复:
  What is the member variables list after the colon in a constructor good for?

我找到了这个代码,它是Vector3f类的构造函数。

Vector3f::Vector3f()
    : x(0)
    , y(0)
    , z(0)
{

}

这个定义是什么“:x(0),y(0),z(0)”是什么意思,我将如何使用它?

3 个答案:

答案 0 :(得分:4)

这称为类初始化列表。必须有3个成员变量x y z,它将所有变量设置为0。

查看http://www.cprogramming.com/tutorial/initialization-lists-c++.html

类初始化列表很简洁,因为它们允许您在执行构造函数中的代码之前设置类状态的初始值。这与在构造函数中分配值不同,并且可以做很多事情:

  1. 他们允许您为const成员
  2. 分配值
  3. 它们是将值传递给父类
  4. 的构造函数的唯一方法
  5. 它们是实例化类的基于堆栈的成员对象的唯一方法,需要将某种值传递给构造函数。

答案 1 :(得分:3)

在C ++中称为初始化列表

初始化变量xyz

在这种情况下(假设xy& zint),它与以下内容相同:

x = 0
y = 0
z = 0

正如@Charles Bailey所指出的那样,如果类型不是int,而是一些自定义用户定义的类,那么分配&建筑可能不是确切的等价物。

说明:
在初始化程序列表中,类型为已初始化,方法是在每个变量上调用相应的默认构造函数,对于内置数据类型,如int,这与赋值相同但是对于自定义类,构造函数操作可能与赋值操作不同。

答案 2 :(得分:1)

对于原始类型,它与

相同
x = 0;
y = 0;
z = 0;

虽然实际上初始化列表和正文中的赋值之间存在细微差别。当我们通过初始化列表初始化字段时,构造函数将被调用一次。如果我们使用赋值,则首先使用默认构造函数初始化字段,然后使用实际值重新分配(通过赋值运算符)。