首页 > 解决方案 > 为什么 C++ 标准不区分右值引用和转发引用?

问题描述

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

我想知道这背后的原因。

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

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

但是如果我想写一个只接受右值表达式的模板函数:

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

事实证明,这个函数也接受左值表达式。

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

标签: c++templatesforwarding-referencevalue-categories

解决方案


它也被称为通用参考。

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

如果您希望它保持 r 值 ref (T&&),则使用 , std:forward<T>(param),否则当您将其传递到使用它的任何位置时,请确保它是您想要的类型。


推荐阅读