可能重复:
What is this weird colon-member syntax in the constructor?
嗨,我最近在C ++程序中遇到过这种语法。这不是将参数传递给基类构造函数,因为我知道它看起来是什么以及如何编码它。这看起来像是类的某种变量初始化......这是代码:
class Particle
{
private:
bool movable;
float mass;
Vec3 pos;
Vec3 old_pos;
Vec3 acceleration;
Vec3 accumulated_normal;
public:
Particle(Vec3 pos)
: pos(pos),
old_pos(pos),
acceleration(Vec3(0,0,0)),
mass(1),
movable(true),
accumulated_normal(Vec3(0,0,0))
{}
Particle() {}
// More unrelated code
};
答案 0 :(得分:6)
初始化列表可用于初始化成员变量以及父项。这是编写构造函数的正确方法 - 像这样的初始化比在构造函数体中进行赋值更有效,并且在语义上可能更正确。
答案 1 :(得分:3)
这是成员初始化的语法,正如您所推测的那样。对比一下:
class C
{
private:
int i;
public:
C(int i_) : i(i_) {} // initialization
};
使用:
class C
{
private:
int i;
public:
C(int i_) { i = i_; } // assignment
};
通常最好初始化成员而不是在构造函数体中分配成员,并且在某些情况下它是必不可少的(一个例子是引用)。