c++基础笔记12-不要返回引用

71 阅读1分钟

转载自 link

引用

为了防止拷贝构造函数导致的额外开销,我们往往把函数的参数设为const &,我也曾一直想如果返回值也是const &,会不会更快

#include <iostream>
#include <vector>
using namespace std;

vector<int>& f(int n) { 
  vector<int> res(100,0);
  res[0]=n;
  return res;
}

int main() {
  vector<int> a = f(10);
  a[0] = 1;
}

显然是错误的做法。你怎么可以想返回一个局部变量。 然后是一个看似正确的做法。我们返回一个static内部变量。

#include <iostream>
#include <vector>
using namespace std;

vector<int>& f(int n) { 
  static vector<int> res(100,0);
  res[0]=n;
  return res;
}

int main() {
  vector<int> a = f(10);
  a[0] = 1;
}

在大多数情况下这确实是正确的做法。然而下面这个操作,

int main() { cout << (f(0) == f(1)); }

我不想解释为什么输出是1 反正就是尽量少用这种引用就行了,单例模式除外。不用你去想着怎么优化这里,编译器会帮我们做。