C++ - 关于友元赋值运算符重载
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
但是,尽管与第一个几乎相同,但第二个重载编译时没有任何错误(或警告)。
为什么第一个运算符重载无效而第二个似乎没问题(至少对于 GCC 6.3.0 编译器而言)?
=
、()
(函数调用)和 []
运算符必须是 class 的成员。其他运营商一般可以是会员也可以是非会员。
因此,唯一可以重载赋值运算符的情况是在左侧定义 class 时。无法编写左侧参数为非 class 类型的自定义赋值运算符。
为了将my_object
赋值给int
,您需要编写一个转换函数:
struct my_object {
operator int() const { return value; }
// ...
int value;
};
我一直在尝试使用 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 编译器而言)?
=
、()
(函数调用)和 []
运算符必须是 class 的成员。其他运营商一般可以是会员也可以是非会员。
因此,唯一可以重载赋值运算符的情况是在左侧定义 class 时。无法编写左侧参数为非 class 类型的自定义赋值运算符。
为了将my_object
赋值给int
,您需要编写一个转换函数:
struct my_object {
operator int() const { return value; }
// ...
int value;
};