gpt4 book ai didi

c++ - 当变量不是局部变量时我应该继续返回吗

转载 作者:行者123 更新时间:2023-12-05 09:29:43 24 4
gpt4 key购买 nike

有几个关于复制省略和 move 的问题。假设我有以下代码:

class A {};

class B {
public:
A get1() const {
A local_var;
return local_var;
}
A get1bad() const {
A local_var;
return std::move(local_var);
}
A get2() const {
return member_var;
}
A get3() const {
return std::move(member_var);
}
private:
A member_var;
};

我读到很多人说不要在返回时 move 。据我所知,这是因为使用复制省略,在 case get1 上,编译器不会调用构造函数 + move 构造函数,而只会调用默认构造函数,而 case get1bad 强制编译器调用构造函数 + move。

我的问题是关于变量不是本地变量的情况(get2 与 get3)。在那种情况下,变量无论如何都是在类中构造的。在 get2 中,我看不到任何可能的优化。在这种情况下,如果我真的不关心确保类 B 有一个有效的 A 对象,那么实际 move 不是更好吗?它不会只调用通常比复制构造函数便宜的 move 构造函数吗?

最佳答案

A get3() const {
return std::move(member_var);
}

你有一个 const 函数,所以成员也被认为是 const,无论如何都不会 move 。

当你有一个临时的 B 时,你可以考虑 A get3() && 来 move 成员。也许吧,如果这种情况经常发生的话。

拥有一个总是破坏类值的 getter,即使它是一个左值,这似乎是一个罕见的用例。

关于c++ - 当变量不是局部变量时我应该继续返回吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70471628/

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