我很少看到,decltype(auto)但是当我这样做时,它会让我感到困惑,因为它似乎与auto从函数返回时一样.
auto g() { return expr; }
decltype(auto) g() { return expr; }
Run Code Online (Sandbox Code Playgroud)
这两种语法有什么区别?
Ker*_* SB 45
auto遵循模板参数推导规则,并且始终是对象类型; decltype(auto)遵循decltype基于值类别推断引用类型的规则.所以,如果我们有
int x;
int && f();
Run Code Online (Sandbox Code Playgroud)
然后
expression auto decltype(auto)
----------------------------------------
10 int int
x int int
(x) int int &
f() int int &&
Run Code Online (Sandbox Code Playgroud)
Yak*_*ont 10
auto返回将return子句分配给auto变量所推导出的值类型. decltype(auto)返回包含return子句时将获得的类型decltype.
auto按值返回,decltype也许不是.