有人能解释一下这个C++语法吗

Could someone explain this C++ syntax?

本文关键字:C++ 语法 一下 能解释      更新时间:2023-10-16

可能重复:
构造函数中这种奇怪的冒号成员语法是什么?

嗨,我最近在一个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
};
初始化列表可用于初始化成员变量和父变量。这是编写构造函数的正确方法——像这样的初始化比在构造函数体中进行赋值更有效,而且在语义上可能更正确。

正如您所推测的,这是成员初始化的语法。对比一下:

class C
{
private:
  int i;
public:
  C(int i_) : i(i_) {} // initialization
};

带有:

class C
{
private:
  int i;
public:
  C(int i_) { i = i_; } // assignment
};

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