一行复制构造函数

时间:2014-06-30 14:03:05

标签: c++ function class

了解如何创建复制构造函数,我遇到了这个例子:

class MyClass 
{
      int x;
      char c;
      std::string s;
};

由编译器复制为:

 MyClass::MyClass( const MyClass& other ) : x( other.x ), c( other.c ), s( other.s )
  {}

: x( other.x )...与函数标题行在同一行中的含义是什么?它是如何工作的?

1 个答案:

答案 0 :(得分:5)

构造函数“初始化”一个对象。您已经熟悉在构造函数体中使用语句:

MyClass::MyClass(const MyClass& other) {
    x = other.x;
    c = other.c;
    s = other.s;
}

但是在构造函数的主体运行之前,必须初始化对象的所有成员,这意味着它们的构造函数运行,以便您可以调用它们的成员函数(例如上面示例中的operator=)。 C ++使您有机会使用您提供的语法在所谓的member initializer list中显式调用构造函数。 (如果省略它们,编译器会自动调用它们。)请注意,我更喜欢以下格式:

MyClass::MyClass(const MyClass& other)
    : x( other.x )
    , c( other.c )
    , s( other.s )
{}

发生的事情是使用括号中的值调用x(和cs)构造函数。这样更快,因为您只进行一次初始化,而不是两次初始化。这可能看起来很方便,但如果你有const成员,那么事实上这是必要的。

希望有所帮助!