gpt4 book ai didi

c++ - move : what does it take?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:07 26 4
gpt4 key购买 nike

使用 std::string 的 move 赋值运算符(在 VC11 中)需要什么?

我希望它会自动使用,因为在赋值后不再需要 v。在这种情况下是否需要 std::move ?如果是这样,我还不如使用非 C++11 交换。

#include <string>

struct user_t
{
void set_name(std::string v)
{
name_ = v;
// swap(name_, v);
// name_ = std::move(v);
}

std::string name_;
};

int main()
{
user_t u;
u.set_name("Olaf");
return 0;
}

最佳答案

I hoped it'd be used automatically as v isn't needed after the assignment anymore. Is std::move required in this case?

必须始终为左值显式声明 move ,除非它们是从函数(按值)返回的。

这可以防止意外 move 某些东西。请记住:运动是一种破坏性行为;你不希望它就这样发生。

此外,如果 name_ = v; 的语义根据这是否是函数中的最后一行而改变,那将很奇怪。毕竟,这是完全合法的代码:

name_ = v;
v[0] = 5; //Assuming v has at least one character.

为什么第一行有时执行复制而有时执行 move ?

If so, I might as well use the non-C++11 swap.

您可以随心所欲,但 std::move 的意图更为明显。我们知道它的含义以及您用它做什么。

关于c++ - move : what does it take?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489401/

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