从我理解的原因,当你将一个变量定义为一个函数返回值的引用时,实际上你有一个临时对象的引用,其生命周期与引用绑定,你必须将该引用声明为{{ 1}}。
话虽如此,为什么临时定义为const
,以下示例中的const
会自动a2
?
如果您不允许将非const引用绑定到该临时对象,那么为什么不默认自己创建临时对象const
?保持非常量的原因是什么?
const
答案 0 :(得分:2)
您不希望返回const
值,因为它会kill move semantics。
struct A {
A() = default;
A(A&&) = default;
A(A const&) = delete;
};
A foo() { return {}; }
A const bar() { return {}; }
int main()
{
A a1 {foo()};
A a2 {bar()}; // error here
}
这是付出太多代价,只是为了免除键入auto const&
来绑定临时的麻烦。