假设有以下模板
1 | template<typename T> |
当ParamType
为以下模式时,推导的结果符合预期
T&
T*
const T&
如
1 | int p; |
但如果ParamType = T&&
,则会区分左值引用和右值引用
1 | int p; |
测试
当ParamType = T&
, 所期望的是一个左值,如果传入一个右值则会报错
1 |
|
当使用万能引用时,则不会发生这种情况,为啥称为万能?我捉摸着是因为既可以匹配左值,又能匹配右值吧
1 |
|
退化
数组的类型是type[N]
,但是在将其传入模板时,会退化成type*
1 |
|
而函数也是如此,除非将其作为引用初始化,不过对于函数来说,并没有什么不同之处
1 |
|
总结
&&
能同时匹配左值和右值- 函数和数组在推导时有可能会退化为指针