我一直在阅读有效的现代 C++ 并且以下内容引起了我的注意:
在第 28 条中,斯科特写道:
总之,这些关于通用引用和左值/右值编码的观察意味着对于这个模板
template<typename T> void func(T&& param);
推导的模板参数 T 将编码传递给 param 的参数是左值还是右值。编码机制很简单。当左值作为参数传递时,T 被推断为左值引用。当传递一个右值时,T 被推断为非引用。(注意不对称:左值被编码为左值引用,而右值被编码为非引用。)
有人可以解释为什么选择这种编码机制吗?
我的意思是,如果我们遵循引用折叠规则而不是使用上述带有右值的模板会产生右值引用。据我所知,如果将其推断为右值引用,一切都会一样。为什么它被编码为非参考?