函数那个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.
我想知道,为什么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.