喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,
圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。
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
反正就是儘量少用這種引用就行了,單例模式除外。不用你去想着怎麼優化這裏,編譯器會幫我們做。