本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.14节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
6.14 正确使用引用参数和引用返回值
从缺陷中学习C/C++
代码示例
int &add(int n, int m)
{
n = n + m;
return n;
}
int main()
{
int i = 10;
int b = add(i, 1);
cout << b << endl;
return 0;
}
现象&后果
预期的输出结果是11,但实际输出的结果不确定。
Bug分析
add函数是一个函数引用,而add函数的返回值是形参n,形参是函数内的局部变量,函数执行结束之后,函数内的局部变量就被销毁,内存空间就被收回。因此,add函数返回的内存单元中的值就不确定,b的内容就不确定。正确方法是:确保返回的内存空间不会随着函数的调用结束、被回收。
正确代码
int &add(int &n, int m)
{
n = n + m;
return n;
}
int main()
{
int i = 10;
int b = add(i, 1);
cout << b << endl;
return 0;
}
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。