vla*_*don 5 c++ lambda language-lawyer c++11 return-type-deduction
鉴于lambda:
auto f = [](const T& var){ return var; };
Run Code Online (Sandbox Code Playgroud)
为什么返回类型f是T(不const T&)?这个标准在哪里?
重点是:
var忽略用于演绎(即)的表达式的引用和顶级cv限定符.标准引用:
关于汽车:
如果占位符是自动类型说明符,则使用模板参数推导的规则确定推断类型T'替换T. 通过使用新发明的类型模板参数U替换auto的出现来获取P,或者如果初始化是copy-list-initialization,则使用std :: initializer_list替换auto的出现.使用函数调用中的模板参数推导规则([temp.deduct.call])推导U的值,其中P是函数模板参数类型,相应的参数是e.如果扣除失败,则声明格式不正确.否则,通过将推导的U代入P来获得T'.
如果P不是引用类型:
- 如果A是cv限定类型,则类型推导将忽略A类型的顶级cv限定符.
关于参考:
如果表达式最初具有"对T的引用"类型([dcl.ref],[dcl.init.ref]),则在进行任何进一步分析之前将类型调整为T.
因此,对于var(即A)const T&,推导的返回类型将在T这里.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |