从函数返回时auto和decltype(auto)有什么区别?

时间:2014-01-26 20:59:13

标签: c++ c++14

我很少看到decltype(auto)但是当我这样做时会让我感到困惑,因为从函数返回时它似乎与auto做同样的事情。

auto g() { return expr; }
decltype(auto) g() { return expr; }

这两种语法有什么区别?

2 个答案:

答案 0 :(得分:42)

auto遵循模板参数推导规则,并且始终是对象类型; decltype(auto)遵循decltype规则,根据值类别推断引用类型。所以,如果我们有

int x;
int && f();

然后

expression    auto       decltype(auto)
----------------------------------------
10            int        int
x             int        int
(x)           int        int &
f()           int        int &&

答案 1 :(得分:8)

auto返回将return子句分配给auto变量的推导值类型。 decltype(auto)返回在decltype中包装return子句时将获得的类型。

auto按值返回,decltype可能不会。