为什么C ++标准不区分右值引用和转发引用?

时间:2019-06-16 13:18:20

标签: c++ templates forwarding-reference value-categories

据我所知,C ++标准并未区分右值引用和转发引用。

我想知道其背后的原因。

如果我想编写仅接受左值表达式的模板函数,请执行以下操作:

/{image}

但是,如果我要编写仅接受右值表达式的模板函数:

template<typename T>
void func(T& param); 

事实证明,此函数还接受左值表达式。

问题是:这种语言设计背后的逻辑是什么?

1 个答案:

答案 0 :(得分:0)

它也被称为通用参考书。

顾名思义,它是一个通用引用,允许使用许多不同的类型。

如果希望它保留r值参考(T &&),请使用std:forward<T>(param),否则请确保将其传递给使用它的位置时,它是您想要的类型。 / p>