构造函数中的变量声明

时间:2013-05-01 09:55:34

标签: c++ constructor

我是C ++的新手我不明白这种声明。例如,这是我的班级:

class Complex
{
  public:
    Complex( double r, double i ) : re(r), im(i) {}
    Complex operator+( Complex &other );
    void Display( ) {   cout << re << ", " << im << endl; }

    double re, im;
};

我不明白这个构造函数中的声明:

Complex( double r, double i ) : re(r), im(i) {}

即如果我们在构造函数re(r), im(i)中声明这样的符号“:”是什么以及会发生什么。

1 个答案:

答案 0 :(得分:3)

这是成员初始化列表。它用于初始化成员(信不信由你)。在这种情况下,它指出应使用re初始化成员r,并使用im初始化成员i

对于类类型成员来说,在构造函数的开头避免可能昂贵的不必要的默认初始化是特别有用的。例如,如果您有std::string成员,则以下构造函数将首先默认将其构造为空字符串,然后分配给它:

Class() { string_member = "Hello"; }

以下构造函数只是用"Hello"构造它作为构造函数的参数:

Class() : string_member("Hello") { }

初始化后无法分配const成员,因此必须由成员初始化列表初始化(除非您在C ++ 11中提供了一个类内初始化程序)。