0

我是 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)

4

1 回答 1

3

这是一个成员初始化列表。它用于初始化成员(信不信由你)。在这种情况下,它声明成员re应该被初始化r并且成员im应该被初始化i

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

Class() { string_member = "Hello"; }

而以下构造函数将简单地将其构造"Hello"为构造函数的参数:

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

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

于 2013-05-01T09:57:10.277 回答