【发布时间】:2019-01-08 23:41:42
【问题描述】:
我有一个返回地图的 util 函数
std::map getFooMap() {
std::map foo;
// ... populate the map
return foo;
}
从调用方,我想将地图分配给某个对象的数据字段。我能做到:
dest.data = getFooMap()
这会比下面的更快吗?
auto temp = getFooMap();
dest.data = std::move(temp);
我认为这应该是因为我避免了额外的副本?
【问题讨论】:
-
好的编译器会优化这两个调用以实现几乎相同的效果,但如果不是这种情况,则首选第一个。为什么要立即将返回的变量命名为
std::move? -
您检查过组件吗? FWIW,我听说
std::move抑制NRVO,所以在一个好的编译器上,我希望无移动选项更快或至少与std::move一样快。 -
最好能构造
dest.data调用getFooMap(),这通常意味着在构造dest时进行调用。这对你来说可能吗?