type
status
date
slug
summary
tags
category
icon
password
介绍
这几天看到一个比较有意思的写法,即:
单从语法上看感觉很莫名其妙,取 auto 的类型是什么鬼?查了下资料发现其实这就是为了解决特定问题而发明的语法糖而已。
我们首先要知道,在 C++ 里使用 auto 去定义变量或者声明函数返回值的时候,如果不声明成 auto& 或者 const auto&,即便其源类型是引用,也会被当成值对待:
因为这个特点,在用模板写一些通用代码的时候就很容易遇见引用在经过一次 auto 传递之后被改成了值传递的问题,这时候用 decltype(auto) 就能很好地规避,decltype(auto) 就像是 auto 类型的完美转发,任意类型的 auto 用 decltype(auto) 来接收都可以完美保持原来的类型:
decltype(auto) 最典型的一个用法就是写一些泛型函数的时候,函数有可能返回值,也可能返回引用,这时候就可以只用一个 decltype(auto) 作为返回值即可,例如下面的一个例子:
decltype(auto) 平时用的不太多,但是要是不知道的话,想做返回值类型的完美转发基本还没什么辙,就跟上面说的一样,你可以认为他是一个解决特定问题的语法糖。
参考资料
- 作者:Kindem
- 链接:https://www.flyandnotdown.com/post/10d8fb78-2f78-80fe-be33-c8e9b9029be3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。