有人可以解释这个C ++语法吗?

时间:2011-04-28 08:56:13

标签: c++ constructor

  

可能重复:
  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
};

2 个答案:

答案 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
};

通常最好初始化成员而不是在构造函数体中分配成员,并且在某些情况下它是必不可少的(一个例子是引用)。

相关问题