🥎C++ decltype(auto) 介绍
00 分钟
2024-9-26
2024-11-5
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) 平时用的不太多,但是要是不知道的话,想做返回值类型的完美转发基本还没什么辙,就跟上面说的一样,你可以认为他是一个解决特定问题的语法糖。

参考资料

 
上一篇
CMake 配置 C++ Modules
下一篇
一文理解 FP16 Shader

评论
Loading...