Ant*_*Ant 0 c++ move copy-constructor
假设我有这个代码:
void MyFunc(const std::string& param) {
  std::string maybe_altered_param;
  if (ConditionIsMet()) {
    maybe_altered_param = AlterParam(param);
  } else {
    maybe_altered_param = param; // <-- unnecessary copy 
  }
  // do stuff with maybe_altered_param
  // maybe_altered_param does not need to be modified further.
}
该AlterParam函数返回字符串的副本,因此当ConditionIsMet返回 true 时,会创建一个副本以填充 Maybe_altered_param。然而,当ConditionIsMet(),这是次优的。在第二种情况下,我只想为同一个对象指定另一个名称,而不需要副本或任何类似的内容。
在这种情况下删除不必要的副本的最简单方法是什么?
我认为你关于引用绑定的问题是误导的。它正在寻找一种语言解决方案来解决本质上的代码组织问题。
你想要“用 Maybe_altered_param 做一些事情”,那些你不想为每个分支重复的事情(因为 DRY 代码是最好的代码)。那么为什么不重构这一点呢?
static void MyFuncImpl(const std::string& maybe_altered_param) {
  // do stuff with maybe_altered_param
}
void MyFunc(const std::string& param) {
  if (ConditionIsMet()) {
    MyFuncImpl(AlterParam(param));
  } else {
    MyFuncImpl(param);
  }
}
十分简单。仅当满足条件时才会创建额外的副本,并且我们所做的事情maybe_altered_param仅拼写一次,并由该参数参数化。
可能不是您想要的答案,但我认为值得考虑。