我最近刷新了我的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 –