如何通过许多函数有效地传递参数

Mat*_*usz 8 c++ c++11

从一段时间以来,我们可以听到很多价值,因为semanthics在C++中非常重要(即这里这里).我知道我们应该使用它,特别是当我们打算复制函数体内的值时.所以我认为这样的用法是公平的:

void foo(std::string txt) { my_container.emplace_back(move(txt)); }
Run Code Online (Sandbox Code Playgroud)

但是我没有找到任何建议,如果我必须通过一个大型项目中的大型函数树传递该参数.例如:

void bar(std::string txt) { foo(move(txt)); /* more actions */ }
void boo(std::string txt) { bar(move(txt)); /* more actions */ }
Run Code Online (Sandbox Code Playgroud)

有人可以推荐在这种情况下做什么吗?我们应该保持价值语义,并希望编译器优化器能够限制移动操作的数量或在任何地方使用const引用,并且最后只有一个副本?或许,正如在许多情况下在C++中,它取决于(即复制和移动特定类型的成本)?:-)

Red*_*III 0

对于模板和类似模板的解决方案,您显然应该选择完美转发。在其他情况下,通过声明强制复制foo(MyType copy)似乎很困难。避免成本,并在必要时进行复制,即使通过复制省略,编译器可能比移动操作更有效。