【问题标题】:Why doesn't C++ standard distinguish rvalue references and forwarding references? [duplicate]为什么 C++ 标准不区分右值引用和转发引用? [复制]
【发布时间】:2019-06-16 13:18:20
【问题描述】:

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

我想知道这背后的原因。

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

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

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

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

原来这个函数也接受左值表达式。

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

【问题讨论】:

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


【解决方案1】:

它也被称为通用参考。

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

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

【讨论】:

  • 请注意它曾经被称为通用参考。现在的正确术语是转发
  • 通用引用确实是一个过时的术语。
猜你喜欢
  • 2018-02-10
  • 2013-04-28
  • 2016-04-05
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2015-12-13
相关资源
最近更新 更多