ff()
函数返回一个右值,但是当我将函数的返回值更改为const
时,它返回左值吗?当我将"lvalue reference"
更改为"rvalue reference"
test ff() { }
更改为const test ff() { }
#include <iostream>
using namespace std;
class test { };
void fun( const test& a)
{
cout << "lvalue reference"<<endl;
}
void fun( test&& a)
{
cout << "rvalue reference"<<endl;
}
const test ff() { } // <<---return value is const now
int main()
{
fun(ff());
}
输出:
lvalue reference
答案 0 :(得分:9)
void fun( test&& a)
是一个引用非常量右值的函数。 ff
返回const test
,它是一个常量值。您不能将对非const右值的引用绑定到const右值,因为这会违反const正确性。这就是为什么它绑定到void fun( const test& a)
的原因,后者引用了const test
请注意,按值返回时,返回const thing
而不是thing
没有好处。只有在通过引用返回时,才将const
添加到返回类型很重要。如果您具有标记为const
的成员函数或返回对常量数据成员的引用,则必须使用const
来保持const正确性。
答案 1 :(得分:2)
您的测试功能输出具有误导性,应改为使用测试功能:
void fun( const test& a)
{
cout << "lvalue const reference"<<endl;
}
void fun( test& a)
{
cout << "lvalue reference"<<endl;
}
void fun( test&& a)
{
cout << "rvalue reference"<<endl;
}
void fun( const test&& a)
{
cout << "rvalue const reference"<<endl;
}
然后您将看到那里真正发生的事情。