引用函数按值和auto返回

时间:2016-11-30 12:20:19

标签: c++ reference const auto

从我理解的原因,当你将一个变量定义为一个函数返回值的引用时,实际上你有一个临时对象的引用,其生命周期与引用绑定,你必须将该引用声明为{{ 1}}。

话虽如此,为什么临时定义为const,以下示例中的const会自动a2? 如果您不允许将非const引用绑定到该临时对象,那么为什么不默认自己创建临时对象const?保持非常量的原因是什么?

const

1 个答案:

答案 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&来绑定临时的麻烦。