那么为什么拷贝构造函数没有在“const Integer运算符+(const Integer & rv)”函数中被调用。是因为RVO吗? 如果是,我需要做些什么来防止它?为什么在这段代码中不会调用拷贝构造函数
#include <iostream>
using namespace std;
class Integer {
int i;
public:
Integer(int ii = 0) : i(ii) {
cout << "Integer()" << endl;
}
Integer(const Integer &I) {
cout << "Integer(const Integer &)" << endl;
}
~Integer() {
cout << "~Integer()" << endl;
}
const Integer operator+(const Integer &rv) const {
cout << "operator+" << endl;
Integer I(i + rv.i);
I.print();
return I;
}
Integer &operator+=(const Integer &rv) {
cout << "operator+=" << endl;
i + rv.i;
return *this;
}
void print() {
cout << "i: " << i << endl;
}
};
int main() {
cout << "built-in tpes:" << endl;
int i = 1, j = 2, k = 3;
k += i + j;
cout << "user-defined types:" << endl;
Integer ii(1), jj(2), kk(3);
kk += ii + jj;
}
我得到一个错误如果我会注释掉复制构造函数。我期望复制构造函数在operator +返回时被调用。以下是节目
built-in tpes:
user-defined types:
Integer()
Integer()
Integer()
operator+
Integer()
i: 3 // EXPECTING Copy Constructor to be called after this
operator+=
~Integer()
~Integer()
~Integer()
~Integer()
你期望你的拷贝构造函数被调用的地方? –
显示打印出的内容可以让我们更深入地了解您面临的实际情况。顺便说一句,你的拷贝构造函数不会复制任何东西。或者'I :: i'的复制构造函数是自动调用的?我不这么认为,但我不完全确定。 –
@AndréPuel:他期待'operator +'返回时调用copy-ctor! – Nawaz