一行复制构造函数
one line copy constructor
在讨论如何创建复制构造函数时,我遇到了这个例子:
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
(以及c
和s
)构造函数是使用括号中的值调用的。这样更快,因为你只做了一次初始化,而不是两次。这似乎是一个很好的方便,但实际上,如果您有const
成员,这是必要的。
希望有帮助!
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 当从函数参数中的临时值调用复制构造函数时
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 复制构造函数、赋值运算符C++
- std::ofstream 作为类成员删除复制构造函数?
- 复制构造函数C++无法正确复制指针
- 关于复制构造函数的一个棘手问题
- 为什么调用复制构造函数而不是移动构造函数?
- 填充上编译器生成的复制构造函数之间的不一致
- C++ 对象指针数组的复制构造函数
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 防止在复制构造函数中隐式调用基构造函数
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 具有已删除移动和复制构造函数的类的就地构造
- 复制构造函数隐式转换问题
- 复制构造函数中的递归调用