按值传递与按右值引用传递
何时声明:
在某些情况下其中函数需要传递参数的所有权,将函数声明为:
- void foo(Widget w);按值传递,需要隐式复制所传递的参数。
- void foo(Widget&& w);通过右值引用传递,允许显式移动所传递的参数。
主要区别:
1。复制控制:
- 按值传递:发生隐式复制,可能会引入额外成本。
- 按右值引用传递:复制构造需要显式移动,强制调用者管理副本。
2.接口语义:
- 值参数:该函数表示它想要对参数的副本进行操作。
- 右值引用参数:该函数打算获取参数并可以进行修改。
3.效率:
- 按值传递:可以消除单个移动构造函数调用。
- 按右值引用传递:编译器优化可以消除调用方的复制或移动。
- 但是,当传递的参数没有大型或昂贵的成员时,效率提升可能可以忽略不计。
接口含义:
Rvalue引用参数传达以下意图:
- 函数声明传递值的所有权。
- 函数可以修改传递的值而不影响调用者的引用。
- 调用者放弃对传递值的所有所有权和责任。
相反,值参数指示:
- 函数对传递值的副本进行操作。
- 调用者保留所传递值的所有权,并且函数所做的任何更改都不会影响它。
以上是什么时候应该使用按值传递与按右值引用传递?的详细内容。更多信息请关注PHP中文网其他相关文章!