喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验,
图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可。
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
反正就是尽量少用这种引用就行了,单例模式除外。不用你去想着怎么优化这里,编译器会帮我们做。