繁体   English   中英

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

但是,尽管与第一个重载几乎相同,但第二个重载编译时没有任何错误(或警告)。


compiler)?为什么第一个操作符重载无效而第二个操作符重载看起来没问题(至少编译器如此)?

=() (函数调用)和[]运算符必须是类的成员。 其他运营商通常可以是会员或非会员。

因此,您可以重载赋值运算符的唯一时间是在左侧定义类时。 无法编写左侧参数为非类类型的自定义赋值运算符。

为了将my_object分配给int ,您需要编写一个转换函数:

struct my_object {
    operator int() const { return value; }
    // ...
    int value;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM