知识卡片
模板推导三形态
内容
模板推导先按形参形态分流:引用形参忽略实参的引用属性并保留被引用对象的常量性;通用引用对左值作特殊推导;按值形参丢弃引用及顶层常量性。判断传参是否复制、是否可修改,应先看形参,再看实参。数组和函数另见[[数组函数会退化]]。
参考来源
- 位置:《Effective Modern C++》第1章《类型推导》,条款一:理解模板类型推导(源文件:_epub-src/EPUB/text/ch002.xhtml)
- 结论依据:原文区分三类形参并分别说明引用、限定符和左值的处理,因此把推导过程组织为按形参分流的判断。
- 原始内容:在模板类型推导时,有引用的实参会被视为无引用,他们的引用会被忽略 对于通用引用的推导,左值实参会被特殊对待 对于传值类型推导, const 和/或 volatile 实参会被认为是non- const 的和non- volatile 的 在模板类型推导时,数组名或者函数名实参会退化为指针,除非它们被用于初始化引用