一行复制构造函数

one line copy constructor

本文关键字:复制 构造函数 一行      更新时间:2023-10-16

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

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 )...是什么意思?它是如何工作的?

构造函数"初始化"对象。您已经熟悉了在构造函数体中使用语句:

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

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

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

正在发生的是x(以及cs)构造函数是使用括号中的值调用的。这样更快,因为你只做了一次初始化,而不是两次。这似乎是一个很好的方便,但实际上,如果您有const成员,这是必要的。

希望有帮助!