【问题标题】:How to express constness of a forwarding reference?如何表达转发引用的常量?
【发布时间】:2016-07-14 09:24:50
【问题描述】:

请考虑以下带有转发引用参数的模板函数接口:

template<typename T>
void f(T&& t) { ... }

在这种情况下,f 采用左值引用或右值引用,具体取决于 f 的参数类型。如何表达f 不修改其参数?以下幼稚的方法不起作用,因为它不再允许将左值引用传递给f

template<typename T>
void f(const T&& t) { ... }

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    如何表示 f 不修改其参数?

    如果函数不修改其参数,则使用转发引用没有任何好处。当您想要将参数 forward 到某个其他函数上时,您可以使用转发引用,该函数关心参数是左值还是右值(因为左值和右值可能有单独的重载,而右值一个可以更有效)。

    如果你的函数没有修改参数,那么它不需要关心它是左值还是右值,所以它可以无条件地接受const T&amp;。这可以绑定到左值和右值,并承诺不修改参数。

    template<typename T>
    void f(const T& t) { ... }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2019-11-07
      • 2017-10-01
      相关资源
      最近更新 更多