c++的骚操作·返回引用

上回说了这次要写点骚操作


在群里看到这样一道题目:

picture

看题目第一反应是什么呢?
是在空行处加 int

但是往下看了一下程序
很明显,

getElement(a,1) = 10

很逆天函数返回怎么能作为左值呢?

机器猫大佬@李狗嗨(假装有艾特)给我指了明路:返回引用

c++有三种传递方式:值传递,指针传递,引用传递

引用传递:当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//返回引用
const string &shorterString(const string &s1,const string &s2)
{
return s1.size()<s2.size()?s1:s2;
}
//禁止返回局部对象的引用
const string &mainip(const string &s)
{
string ret=s;
return ret;
}
//引用返回左值
char &get_val(string &str,string::size_type ix)
{
return str[ix];
}

一时语塞不知道该怎么解释了甚至连上面的代码我也是百度出来的

emm自己理解?

所以的话,到题目要求,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int& getElement(int *a, int i) {
return a[i];
}
int main() {
int a[] = {1, 2, 3};
getElement(a, 1) = 10;
cout << a[1];
return 0;
}

是不是看完之后觉得……一口老血吐出来