gpt4 book ai didi

c++ - 标准 move 中没有拷贝的分配

转载 作者:行者123 更新时间:2023-11-27 23:41:52 25 4
gpt4 key购买 nike

我有一个返回 map 的 util 函数

std::map getFooMap() {
std::map foo;
// ... populate the map
return foo;
}

从调用方来看,我想将映射分配给某个对象的数据字段。我能做到:

dest.data = getFooMap()

这会比下面的更快吗?

auto temp = getFooMap();
dest.data = std::move(temp);

我认为这应该是因为我避免了一份额外的拷贝?

最佳答案

I think this should be as I avoid one extra copy?

只要“std::map”是可 move 的,您就只能避免一次额外的 move ——优化器也可能会避免这种 move 。

性能差异可能可以忽略不计或不存在,但 dest.data = getFooMap() 更简单并且可能不会更慢。

正如评论中指出的那样,直接初始化 dest.data 而不是在构造后分配它会更快。这可以通过在成员初始化器中调用 getFooMap 来实现。

关于c++ - 标准 move 中没有拷贝的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101315/

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