C ++:在括号前初始化一些东西

时间:2012-01-22 18:33:29

标签: c++ syntax initialization

  

可能重复:
  What does a colon following a C++ constructor name do?
  Class construction with initial values

我看到的代码看起来像这样:

class Demo
{
    Joystick joystick;

public:
    Demo(void):
        joystick(1)  // The first USB port
    {
        /* snip */
    }
};

操纵杆正在构造函数中的括号之前初始化。这样做意味着什么?这个叫什么?我假设它在某种程度上与初始化括号内的操纵杆有所区别 - 它有什么不同之处?

1 个答案:

答案 0 :(得分:1)

它被称为初始化列表,它与构造函数体内初始化不同。

您可以在初始化列表中调用类中每个数据成员的构造函数。你也可以在其中调用自定义父类构造函数,如果你没有,你没有使用初始化列表初始化的每个数据成员或父类将使用其默认构造函数初始化,如果它没有,您将看到编译器错误。

这是一个扩展示例:

class Parent
{
bool b;
public:
    Parent(bool B): b(B)
    {
    }
};

class Child: public Parent
{
    int i;
    double d;
public:
    Child(int I, double D, bool B): i(I), d(D), Parent(B)
    {
    }
};

对于调用它们的顺序,请参阅this questionthis question

事实上,解释它是一篇完整的文章,因为它是课程中的一个基本而重要的东西,只需尝试Googling并阅读一些结果。