C ++使用移动语义将参数传递给另一个函数

问题描述 投票:1回答:1

我有接受两个参数的函数,但是其中一个(映射容器)传递给另一个函数:

void myFunc(const std::map<std::string, int> &myMap, int num) {
    int x = internalFunc(myMap);
    // do some stuff...
}

int internalFunc(const std::map<std::string, int> &myMap) {
    // return some map statistics
}

main.cpp中的某个地方:

std::map<std::string, int> map1{ {"Hello", 10}, {"Hello2", 20}, {"Hello3", 30} };
myFunc(map1, 20);

我的问题是:

移动语义是优化这段代码(使用move将一个参数传递给另一个函数的一种好方法,如下所示:

int internalFunc(std::map<std::string, int> &&myMap) {
    // now gets rvalue reference
    // return some map statistics
}

void myFunc(std::map<std::string, int> myMap, int num) {
    int x = internalFunc(std::move(myMap));
    // do some stuff...
}

在这种情况下,我不想使用通用引用(使用模板)和std :: forward,因为此函数始终在这种类型的map上调用,并且我希望代码尽可能简单。

内部函数总是由这一特定函数myFunc调用。

移动语义是优化此类功能的好方法吗?我了解使用移动语义进行优化取决于移动的对象类型,但让我们继续使用标准地图容器的上述示例。

谢谢

c++ pass-by-reference move-semantics
1个回答
1
投票

移动语义在您需要修改map或函数出于某些原因需要拥有map所有权的情况下很有用(如果函数是类成员,例如setter或构造函数,则后者更容易理解)实例)。

© www.soinside.com 2019 - 2024. All rights reserved.