我有接受两个参数的函数,但是其中一个(映射容器)传递给另一个函数:
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调用。
移动语义是优化此类功能的好方法吗?我了解使用移动语义进行优化取决于移动的对象类型,但让我们继续使用标准地图容器的上述示例。
谢谢
移动语义在您需要修改map
或函数出于某些原因需要拥有map
所有权的情况下很有用(如果函数是类成员,例如setter或构造函数,则后者更容易理解)实例)。