gpt4 book ai didi

c++ - 为什么使用复制构造函数而不是赋值运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:18 26 4
gpt4 key购买 nike

MyClass 是这样定义的:

class MyClass {
double x, y;
public:
MyClass (double a = 0., double b = 0.) {
x = a;
y = b;
cout << "Using the default constructor" << endl;
}
MyClass (const MyClass& p) {
x = p.x;
y = p.y;
cout << "Using the copy constructor" << endl;
}
MyClass operator =(const MyClass& p) {
x = p.x;
y = p.y;
cout << "Using the assignment operator" << endl;
return *this;
}
};

我测试了在我的主程序中调用每个构造函数或方法的时间:

int main() {
cout << "MyClass p" << endl; MyClass p; cout << endl;
cout << "MyClass r(3.4)" << endl; MyClass r(3.4); cout << endl;
cout << "MyClass s(r)" << endl; MyClass s(r); cout << endl;
cout << "MyClass u = s" << endl; MyClass u = s; cout << endl;
cout << "s = p" << endl; s = p; cout << endl;
}

为什么在第四个示例 MyClass u = s 中使用复制构造函数而不是赋值运算符?

编辑

包括要求的输出:

MyClass p
Using the default constructor

MyClass r(3.4)
Using the default constructor

MyClass s(r)
Using the copy constructor

MyClass u = s
Using the copy constructor

s = p
Using the assignment operator
Using the copy constructor

最佳答案

因为这不是一个实际的赋值,因为你同时声明了你。因此,调用构造函数而不是赋值运算符。这更有效,因为如果不是这个特性,就会有先调用默认构造函数然后调用赋值运算符的冗余。这会导致创建不需要的拷贝,从而显着降低 C++ 模型的性能。

关于c++ - 为什么使用复制构造函数而不是赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23063650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com