繁体   English   中英

当类成员是引用时,无法生成默认赋值运算符?(在C ++中)

[英]Cannot generate default assignment operator when a class member is a reference?(in C++)

这是我的代码:

class NO {
  public:
    NO(std::string& name):nameValue(name){};

  private:
    std::string& nameValue;           // this is now a reference

};

int main(){

  int b=10,c=20;
  int& d=b;
  d=c;

  std::string p="alpha", q="beta";

  NO x(p), y(q);
  x=y;

  return 0;

}

我收到错误:

"non-static reference member ‘std::string& NO::nameValue’, can’t use default assignment operator"

当我可以使用内置类型执行相同操作时,为什么不能使用引用成员重新分配对象?

谢谢

引用可以初始化,但不能分配给。 初始化引用后,只要它存在,它将继续引用同一个对象。 如果你没有定义赋值运算符,编译器将合成一个执行成员分配的运算符,但在这种情况下这是不可能的,因此编译器根本不能/不会合成一个。

您可以自己定义赋值运算符。 您可以自行决定如何处理作为参考的成员。 大多数情况下,您只是将对象定义为不包含任何引用。

当你了解它时,引用的主要用途几乎肯定是参数。 作为一个类的成员,它们经常没有意义,并且在极少数情况下它们确实有意义,该类的对象可能不应该支持赋值。

暂无
暂无

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

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