如何表达转发引用的常量?

时间:2016-07-14 09:24:51

标签: c++ c++11

请考虑以下带有转发参考参数的模板功能接口:

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

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

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

1 个答案:

答案 0 :(得分:34)

  

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

如果函数没有修改其参数,那么使用转发引用没有任何好处。当你想要转发参数时,你可以使用转发引用来关注其他函数,该函数关心的是参数是左值还是右值(因为左值和右值可能有单独的重载,以及rvalue一个可以更有效率)。

如果你的函数没有修改参数,那么它不应该关心它是否有左值或左值,所以它可以无条件地取const T&。这可以绑定到左值和右值,并承诺不修改参数。

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