为什么C++利用三目运算符可以返回局部变量的引用?
为什么可以这样写:
#include <iostream>
#include <cstring>
using namespace std;
int & func(int a, int b)
{
// 这里的a, b都是局部变量, 在函数中是不能返回局部变量的引用的
// 但借助三目运算符为什么就可以返回局部变量的引用了?
return a > b ? a : b;
}
int main()
{
cout << func(5, 10) << endl;
return 0;
}
当我在函数中直接 return
局部变量 a
或 b
的时候, 编译器会报错, 说返回了局部变量的引用是不可以的。 但如果我写成三目运算符的形式, 编译器就通过了。这是为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
執行下面的代碼,你就會知道。返回局部變量的引用,會有很多不可預期的行爲。
不可以这么写。
有没有三目运算符,都不可以返回局部变量的引用。
事实上,在语法层面,我们是可以做到返回局部对象的引用的。(有没有三目运算符都一样)
但是,通常我们都不会这么写,因为在函数调用结束后,函数内的局部变量已经不存在了(主要表现在,该片空间的地址可被其他程序使用,进而修改该片空间的值)。而函数返回引用,实质上与返回指针是相同的,他们都返回的是 函数内 局部变量所在的空间的 地址 或 值。