【发布时间】:2020-07-01 05:11:15
【问题描述】:
我一直在尝试使用 C++ 类创建代码接口。
在测试中出现的一个令人费解的事情是重载赋值运算符。 看看下面的代码:
struct my_object {
// This doesn't work. :(
friend int& operator =(int& variable, my_object object)
{ variable = object.value; return variable; }
// This works, but `int value; value <<= my_object{};`
// for `int value; value = my_object{};` doesn't seem clean...
friend int& operator <<=(int& variable, my_object object)
{ variable = object.value; return variable; }
};
我的困惑是:
第一次重载不会编译并将此错误记录到控制台终端。
'friend int& operator =(int&, my_object)' must be a nonstatic member function
但是,尽管与第一个重载几乎相同,但第二个重载编译时没有任何错误(或警告)。
为什么第一个运算符重载无效,而第二个似乎很好(至少由 GCC 6.3.0 编译器)?
【问题讨论】:
-
我可以理解为什么第一个重载不应该工作,能够重载像
int这样的 POD 类型的运算符似乎并不干净。但是第二个重载,为什么编译器会接受这个(它可能是标准的AFAIK,也可能不是标准的AFAIK)?
标签: c++ operator-overloading assignment-operator