了解 C++ 中的复制构造函数
Understanding copy constructor in C++
我想了解 C++ 中复制构造函数的概念。我编写了以下程序:
#include<iostream>
using namespace std;
class Box{
private:
int d;
public:
Box(int i){
cout << "Constructor" << endl;
d = i;
}
Box(const Box &old){
cout << "Copy Constructor" << endl;
d = old.d;
}
int getd(){
return d;
}
~Box(){
cout << "Destructor" << endl;
}
Box operator+(const Box& op){
Box c(15);
c.d = d + op.d;
return c;
}
};
int main(){
Box a(10);
Box b = a;
Box c = a+b;
cout << c.getd() << endl;
return 0;
}
这个程序的输出如下:
Constructor
Copy Constructor
Constructor
20
Destructor
Destructor
Destructor
我不明白为什么在 main
函数的第三行没有调用复制构造函数。我认为应该按值 operator+
函数 returns 调用复制构造函数。
编译器正在优化此处的复制构造函数调用,因为标准明确允许该复制是 "elided"。这样的副本有什么意义,真的吗?
虽然你完全正确,因为这是调用复制构造函数的机会,编译器可以做到这一点.事实上,标准确实要求在这里调用复制构造函数是有效的。
我想了解 C++ 中复制构造函数的概念。我编写了以下程序:
#include<iostream>
using namespace std;
class Box{
private:
int d;
public:
Box(int i){
cout << "Constructor" << endl;
d = i;
}
Box(const Box &old){
cout << "Copy Constructor" << endl;
d = old.d;
}
int getd(){
return d;
}
~Box(){
cout << "Destructor" << endl;
}
Box operator+(const Box& op){
Box c(15);
c.d = d + op.d;
return c;
}
};
int main(){
Box a(10);
Box b = a;
Box c = a+b;
cout << c.getd() << endl;
return 0;
}
这个程序的输出如下:
Constructor
Copy Constructor
Constructor
20
Destructor
Destructor
Destructor
我不明白为什么在 main
函数的第三行没有调用复制构造函数。我认为应该按值 operator+
函数 returns 调用复制构造函数。
编译器正在优化此处的复制构造函数调用,因为标准明确允许该复制是 "elided"。这样的副本有什么意义,真的吗?
虽然你完全正确,因为这是调用复制构造函数的机会,编译器可以做到这一点.事实上,标准确实要求在这里调用复制构造函数是有效的。