假设有以下模板
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 |
|
总结
&&能同时匹配左值和右值- 函数和数组在推导时有可能会退化为指针