c++重學筆記12 - 不要返回引用

喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,

圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。


title: c++重學筆記12 - 不要返回引用
mathjax: true
date: 2020-03-13 21:55:03
categories: [c++重學筆記]
tags: [c++重學筆記]
keywords: [c++重學筆記]


引用

   爲了防止拷貝構造函數導致的額外開銷,我們往往把函數的參數設爲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
   反正就是儘量少用這種引用就行了,單例模式除外。不用你去想着怎麼優化這裏,編譯器會幫我們做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章