知识卡片
decltype保留表达式
内容
decltype 对未加括号的名字表达式给出声明类型,对其他表达式按值类别推导;左值表达式得到引用类型。因此 decltype(x) 与 decltype((x)) 可能不同。C++14 的 decltype(auto) 沿用这一规则,返回局部变量时无意加括号可能返回悬垂引用。
参考来源
- 位置:《Effective Modern C++》第1章《类型推导》,条款三:理解 decltype(源文件:_epub-src/EPUB/text/ch002.xhtml)
- 结论依据:原文给出名字、左值表达式与 decltype(auto) 规则,说明括号会改变返回类型及引用寿命。
- 原始内容:decltype 总是不加修改的产生变量或者表达式的类型。 对于 T 类型的不是单纯的变量名的左值表达式, decltype 总是产出 T 的引用即 T& 。 C++14支持 decltype(auto) ,就像 auto 一样,推导出类型,但是它使用 decltype 的规则进行推导。