了解如何创建复制构造函数,我遇到了这个例子:
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 )...
与函数标题行在同一行中的含义是什么?它是如何工作的?
答案 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
(和c
和s
)构造函数。这样更快,因为您只进行一次初始化,而不是两次初始化。这可能看起来很方便,但如果你有const
成员,那么事实上这是必要的。
希望有所帮助!