我最近刷新了我的C++運算符重載知識。按照建議我回復operator overload of '='
的*this
的引用。但後來我發現一個問題: -=一個類的=運算符的重載
#include <iostream>
using namespace std;
class MyClass
{
int num = 4;
public:
MyClass() = default;
MyClass(int x) : num(x) {}
void getnum(int x)
{
num = x;
}
void shownum()
{
cout << num << '\n';
}
MyClass& operator = (const MyClass& obj) // works even without const
{
this->num = obj.num;
return *this;
}
~MyClass() = default;
};
int main()
{
MyClass x, y(5), z(7);
z = MyClass(8) = y; // temporary object return reference
x.shownum();
y.shownum();
z.shownum();
}
此代碼犯規的結果爲,即使臨時對象MyClass(8)
參與其中之間的UB
將y
(精沒問題)相提並論,但隨後的引用將被髮送等同於z
。爲什麼dangling reference
問題在這裏沒有發生?爲什麼過載功能在沒有const MyClass&' on the temporary object 'MyClass(8)
的情況下工作?
這是一種隱式轉換。讓一個對象更具常量易變性是完全合理的 – Incomputable
爲什麼你要考慮編寫這樣的代碼 –
實驗@EdHeal :-P –