提问人:Mantosh Kumar 提问时间:3/14/2023 更新时间:3/14/2023 访问量:127
哪种方式更适合为类调用复制构造函数?
Which way is preferred to call copy constructor for a class?
问:
下面是用 c++ 中的复制构造函数编写的示例类。
class Foo {
public:
Foo() { std::cout << "Foo::Foo\n";}
~Foo() { std::cout << "Foo::Foo\n";}
Foo(const Foo& rhs) {
std::cout << "cctor\n";
}
Foo& operator=(const Foo& rhs) {
if (&rhs == this) return *this;
std::cout << " operator =\n";
return *this;
}
void bar() { std::cout << "Foo::bar\n";}
};
现在我们可以用几种方式编写,这些方式将调用类的复制构造函数。
Foo x;
Foo y;
Foo z = x; // This calls copy constructor
Foo a(z); // This also calls copy constructor
那么,在两种风格中,哪一种是首选,对此有什么解释吗?或者这两者更多的是开发人员的风格偏好。
答:
1赞
user12002570
3/14/2023
#1
在两种风格中,哪一种是首选
Foo z = x;
是复制初始化与直接初始化。如果您了解两者之间的区别,您将能够决定哪种情况适合。在 c++ 中,没有人适合所有人。询问哪个是首选的假设其中一个“总是”优于另一个,但实际上并非如此。根据上下文,一个可能比另一个更受欢迎。Foo A(z);
例如,即使复制构造函数是显式的,直接初始化也会起作用,而复制初始化则不起作用。在执行复制初始化的隐式转换中,不会使用显式复制 ctor。
评论
Foo z = x;
Foo a{z};
Foo z = x;
是复制初始化与直接初始化。如果您了解两者之间的区别,您将能够决定哪种情况适合。在 c++ 中,没有人适合所有人。Foo A(z);
Foo(const Foo& rhs)
Foo& operator=(const Foo& rhs)
Foo z = x;
=