我很少看到decltype(auto)
但是当我这样做时会让我感到困惑,因为从函数返回时它似乎与auto
做同样的事情。
auto g() { return expr; }
decltype(auto) g() { return expr; }
这两种语法有什么区别?
答案 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
可能不会。