gpt4 book ai didi

c++ - 传递右值引用与非常量左值引用

转载 作者:行者123 更新时间:2023-11-30 04:10:33 24 4
gpt4 key购买 nike

如果在将变量传递给函数后我没有用到它,那么传递一个非常量左值引用还是使用 std::move 传递一个右值引用是否重要。假设有两个不同的重载。这两种情况的唯一区别是传递对象的生命周期,如果我通过右值引用传递,它会提前结束。还有其他因素需要考虑吗?

如果我有一个 foo 重载的函数,例如:

void foo(X& x);
void foo(X&& x);

X x;
foo(std::move(x)); // Does it matter if I called foo(x) instead?
// ... no further accesses to x
// end-of-scope

最佳答案

一个对象的生命周期不会在它被右值引用传递时结束。右值引用仅授予 foo 获取其参数所有权并可能将其值更改为无意义的权限。这可能涉及取消分配其成员,这是一种生命周期的结束,但参数本身一直存在到其声明范围的末尾。

在最后一次访问时使用 std::move 是惯用的。没有潜在的不利因素。据推测,如果有两个重载,右值引用一个具有相同的语义但效率更高。当然,他们可以做完全不同的事情,只是为了疯狂的虐待狂。

关于c++ - 传递右值引用与非常量左值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20592013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com