C++ 关于C++; 我正在学习cpp,现在有一个问题。下面是代码和结果。

C++ 关于C++; 我正在学习cpp,现在有一个问题。下面是代码和结果。,c++,C++,我非常想知道的是,为什么在“1”和“2”之间只有一个构造函数,为什么在“3”和“4”之间有赋值和构造函数 先谢谢你 #包括 #包括 使用名称空间std; 甲级{ 公众: (){ coutab=func();仅产生构造,因为新的A直接构造到调用方的内存中 b=c;同时涉及赋值和构造,因为您错误地编写了赋值运算符,使其按值返回,而不是按引用返回,因此在执行赋值后,它会从您刚刚赋值的对象复制构造,返回副本(未使用,并立即丢弃).这是一个巨大的浪费,应该加以修正,以使赋值运算符通过引用返回,更改: A

我非常想知道的是,为什么在“1”和“2”之间只有一个构造函数,为什么在“3”和“4”之间有赋值和构造函数

先谢谢你

#包括
#包括
使用名称空间std;
甲级{
公众:
(){
cout
ab=func();
仅产生构造,因为新的
A
直接构造到调用方的内存中

b=c;
同时涉及赋值和构造,因为您错误地编写了赋值运算符,使其按值返回,而不是按引用返回,因此在执行赋值后,它会从您刚刚赋值的对象复制构造,返回副本(未使用,并立即丢弃).这是一个巨大的浪费,应该加以修正,以使赋值运算符通过引用返回,更改:

A operator=(const A &a){
致:

更好的方法是,使用来避免复制/交换所有地方的代码。

A b=func();
仅产生构造,因为新的
A
直接构造到调用方的内存中

b=c;
同时涉及赋值和构造,因为您错误地编写了赋值运算符,使其按值返回,而不是按引用返回,因此在执行赋值后,它会从您刚刚赋值的对象复制构造,返回副本(未使用,并立即丢弃).这是一个巨大的浪费,应该加以修正,以使赋值运算符通过引用返回,更改:

A operator=(const A &a){
致:


更好的是,避免复制/交换的代码到处都是。

@user4581301:谢谢。我决定链接复制和交换惯用语问题,而不是操作符重载的基本规则和惯用语,因为赋值操作符在基本规则和惯用语问题中特别被忽略了。同意更好的选择。@user4581301:谢谢。我决定链接复制和交换惯用语问题,而不是运算符重载的基本规则和惯用语,因为赋值运算符在基本规则和惯用语问题中被忽略了。同意。更好的选择。
A& operator=(const A &a){