那麼爲什麼拷貝構造函數沒有在「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