函数那个returns有引用吗?

Function that returns a reference?

我想知道,为什么return一个参考值的函数有用?这对我来说没有多大意义,因为无论如何函数都不是左值...

这是一个函数的例子...好吧,它不是函数,它是 class 中的赋值运算符重载,但它看起来像这样

//class name is MyClass
MyClass& operator=(const MyClass& source){
//do things(assign values from the source to the current object)
return *this;
}

为什么要 class 到 return 参考? :/(我在此处的视频教程中发现了类似的代码 link 如果需要 https://www.youtube.com/watch?v=PXcRe-W2w7s

如果返回引用,调用者可以将其用于调用链。在您的示例中,它反映了分配也是一个值(或对象)的约定,即分配的值(或对象)。

vector<int> v(5);
v.at(0) = 666;

这只是因为 at returns 参考。

C++ 相比,C 中赋值运算符的结果是 rvalue 而不是 lvalue :)

所以在 C++ 中你可以这样写

int a, b = 1, c = 2;

( a = b ) = c;

a 将获得 c 的值,丢弃先前分配的 b 的值。

在 C 中,这样的代码将不会被编译。

至于你问的是引用,那么这个功能就很有用了。例如考虑 class std::basic_string.

的成员函数

你可以这样写

std::string s( "Hello" );

std::cout << ( s.append( 1, ' ' ) += "World" ) << std::endl;

可能是因为成员函数append和运算符+=return都引用了原来的pbject.