为什么C++利用三目运算符可以返回局部变量的引用?

发布于 2022-09-12 23:32:22 字数 469 浏览 13 评论 0

为什么可以这样写:

#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 局部变量 ab的时候, 编译器会报错, 说返回了局部变量的引用是不可以的。 但如果我写成三目运算符的形式, 编译器就通过了。这是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深空失忆 2022-09-19 23:32:22

執行下面的代碼,你就會知道。返回局部變量的引用,會有很多不可預期的行爲。

#include <iostream>
using namespace std;

int & func1(int a, int b)
{
    return a > b ? a : b;
}

int & func2(int a, int b)
{
    return a < b ? a : b;
}

int main()
{
    int a = 5, b = 10;
    int& c = func1(a, b);
    int& d = func2(a, b);
    int& e = func1(a, b);
    cout << c << endl;
    cout << d << endl;
    cout << e << endl;

    return 0;
}
情绪操控生活 2022-09-19 23:32:22

不可以这么写。
有没有三目运算符,都不可以返回局部变量的引用。

傲影 2022-09-19 23:32:22

事实上,在语法层面,我们是可以做到返回局部对象的引用的。(有没有三目运算符都一样)

int& func(int a, int b)
{
    return a;
}

但是,通常我们都不会这么写,因为在函数调用结束后,函数内的局部变量已经不存在了(主要表现在,该片空间的地址可被其他程序使用,进而修改该片空间的值)。而函数返回引用,实质上与返回指针是相同的,他们都返回的是 函数内 局部变量所在的空间的 地址 或 值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文