一段时间以来,我们可以听到很多关于值语义在 C++ 中非常重要的信息(即此处和此处)。我知道我们应该使用它,尤其是当我们打算复制函数体内的值时。所以我认为这样的用法是公平的:
void foo(std::string txt) { my_container.emplace_back(move(txt)); }
但是,如果我必须通过有时在大型项目中发生的大型函数树传递该参数,我没有找到任何建议。例如:
void bar(std::string txt) { foo(move(txt)); /* more actions */ }
void boo(std::string txt) { bar(move(txt)); /* more actions */ }
有人可以推荐在这种情况下该怎么做吗?我们是否应该保留值语义并希望编译器优化器能够限制移动操作的数量或在任何地方使用 const 引用并且最后只使用一个副本?或者,就像在 C++ 中的许多情况一样,这取决于(即特定类型的复制和移动成本)?:-)