在C++ Primer一书中,它有一个C样式字符数组的代码,并在 15.3 Operator = 一文中说明了如何重载=运算符。

String& String::operator=( const char *sobj )
{
   // sobj is the null pointer,
   if ( ! sobj ) {
      _size = 0;
      delete[] _string;
      _string = 0;
   }
   else {
      _size = strlen( sobj );
      delete[] _string;
      _string = new char[ _size + 1 ];
      strcpy( _string, sobj );
   }
   return *this;
}

现在,我想知道为什么下面的代码可以完成相同的工作而又没有问题时需要返回引用String &:
void String::operator=( const char *sobj )
{
   // sobj is the null pointer,
   if ( ! sobj ) {
      _size = 0;
      delete[] _string;
      _string = 0;
   }
   else {
      _size = strlen( sobj );
      delete[] _string;
      _string = new char[ _size + 1 ];
      strcpy( _string, sobj );
   }

}
  • 请帮忙。
  • 最佳答案

    它支持以下习惯用法:

    String a, b;
    const char *c;
    
    // set c to something interesting
    
    a = b = c;
    

    为此,b = c必须返回一个适当的对象或引用以分配给a;根据C++运算符优先级规则,它实际上是a = (b = c)

    如果返回指针this,则必须编写a = *(b = c),它不能传达预期的含义。

    07-24 17:10