请考虑以下带有转发引用参数的模板功能接口:
template<typename T>
void f(T&& t) { ... }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,f要么采用左值引用,要么使用右值引用,具体取决于参数的类型f.如何表达f不修改其参数?以下天真的方法不起作用,因为它不再允许将左值引用传递给f:
template<typename T>
void f(const T&& t) { ... }
Run Code Online (Sandbox Code Playgroud)
Jon*_*ely 34
如何表达f不修改其参数?
如果函数不修改其参数,则使用转发引用没有任何好处.如果要将参数转发到某个其他函数来使用转发引用,该函数关心参数是左值还是右值(因为左值和右值可能有单独的重载,而右值可以更高效).
如果你的函数没有修改参数,那么它不应该关心它是否有左值或右值,所以它可以const T&无条件地使用.这可以绑定到左值和右值,并承诺不修改参数.
template<typename T>
void f(const T& t) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |