使用pass by reference来填充容器或使用返回值来填充它更好吗?

时间:2017-01-04 06:22:23

标签: c++ c++11

很抱歉这个令人困惑的标题,如果这是重复的话我很抱歉(我尝试在线搜索答案),希望这个例子可以清除它:

基本上,这样做会更好:

void fill(vector<int> & v);

int main() {
  vector<int> v;
  fill(v);
  return 0;
}

或者这个:

vector<int> fill();

int main() {
  vector<int> v = fill();
  return 0;
}

我一直在阅读有关如何在C ++ 11中编译器将移动函数的返回结果而不是复制它们。其中一个比另一个好吗?或者只是偏好?

2 个答案:

答案 0 :(得分:0)

Single responsibility principle的角度来看,最好使用返回值来修改变量。

例如,如果您有一个fill()函数为向量创建初始配置,那么函数的职责是创建初始配置(从db,file或硬编码配置中读取它们)。不将配置分配给您的变量(这可能也是一个复杂的过程)。

如果您只想更改1个变量,它会增加代码的可读性。您无需记住fill()函数是否修改了您的变量。

答案 1 :(得分:-1)

前者更好,因为它避免了最后的复制操作。但我更喜欢这个:

  bool fill(vector<int> & v);

返回标志用于标识函数是否成功执行。