2011-07-15 38 views
1

可能重复:
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)” 的意思,以及如何将我到处去使用它吗?

+0

如果没有FAQ条目,应该有。寻找... –

+0

有:http://stackoverflow.com/questions/210616/what-is-the-member-variables-list-after-the-colon-in-a-constructor-good-for –

+0

@Fred公平地说,它并不能真正解释你为什么要使用初始化列表,还有一半用于解释::运算符 – Josh

回答

4

这被称为类initaging列表。必须有3个成员变量,x y z,它是所有的人设置为0

退房http://www.cprogramming.com/tutorial/initialization-lists-c++.html

类的初始化列表是整齐的,因为它们允许你前右侧设置类状态的初始值在构造函数中的代码被执行。这是刚刚在你的构造函数分配值不同,使得可能的一些事情:

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

它被称为在C++中的初始化列表

初始化变量x,yz

在这种情况下(假设xy & zint)是一样的:

x = 0 
y = 0 
z = 0 

作为@Charles贝利,适当地指出,万一类型不int但一些自定义用户定义的类然后分配&建设可能不完全相同。

说明:
在初始化列表,所述类型是初始化通过调用每一个可变的适当的默认构造,对于像int一个内置的数据类型,这是相同分配但对于自定义类的构造函数操作可能与赋值操作不同。

+1

你不能说在这种情况下它是相同的,而不知道'x'的类型,'y '和'z'。当然,如果它们是(例如)int,那么它会有相同的效果,但是它们可能具有用于构造和赋值的不同行为的类类型,或者它们甚至可能是'const'。 –

+0

@Charles Bailey:没错,我只是假设他们是'整数',但的确应该澄清。我添加了要回答的细节。 –

1

基本类型是一样的

x = 0; 
y = 0; 
z = 0; 

虽然实际上有一个体内初始化列表和任务之间的细微差别。当我们通过初始化列表初始化字段时,构造函数将被调用一次。如果我们使用赋值,那么字段将首先使用默认构造函数初始化,然后通过赋值运算符重新赋值为实际值。