[英]C++ - On friend assignment-operator overloads
我一直在尝试使用 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
但是,尽管与第一个重载几乎相同,但第二个重载编译时没有任何错误(或警告)。
compiler)?为什么第一个操作符重载无效而第二个操作符重载看起来没问题(至少编译器如此)?
=
、 ()
(函数调用)和[]
运算符必须是类的成员。 其他运营商通常可以是会员或非会员。
因此,您可以重载赋值运算符的唯一时间是在左侧定义类时。 无法编写左侧参数为非类类型的自定义赋值运算符。
为了将my_object
分配给int
,您需要编写一个转换函数:
struct my_object {
operator int() const { return value; }
// ...
int value;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.