cpp引用做函数的返回值

04 引用做函数的返回值

作用:引用可以作为函数的返回值

注意:不要返回局部变量的引用

作用:函数调用作为左值

我们分开理解一下:

  1. 引用可以作为函数的返回值,但是不要返回局部变量的引用

    如何将引用作为函数的返回值:

    int& test1();
    int main()
    {
     int& ref = test1();
    }
    int& test1()
    {
    int a = 10;
    return (a);
    }

    如上文,返回的是引用时,需要在函数的声明的时候标注引用:也就是:int& test1();

    但是不能返回局部变量的引用,这是因为函数内的数据存放在栈区,这个区域的数据由编辑器控制开辟和释放。如果离开这个函数,数据将会被编译器清除(虽然会保存一次。)

    如果忘记栈区的话可以翻内存四区的笔记。

    但是可以试试返回的后果:

    #include 
    using namespace std;
    int& test1();
    int main()
    {
    int& ref = test1();
    for (int i = 0;i < 3;i++)
    {
        cout << ref << endl;
    }
    return 0;
    }
    int& test1()
    {
    int a = 10; 
    return (a);
    }

    结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    10
    214
    214

    第一次能成功打印 10,是因为编译器做了保留。第二次及以上,则会显示乱码。当然,出了函数,在使用引用或者地址,那就是非法操作了。

  2. 函数的调用可以作为左值

    #include 
    using namespace std;
    int& test2();
    int main()
    {
    int& ref = test2();
    for (int i = 0;i < 3;i++)
    {
        cout << ref << endl;
    }
    return 0;
    }
    int& test2()
    {
    static int a = 10; 
    return a;
    }

    在这里,函数test2里面的变量a不是一个局部变量,而是一个静态变量(静态变量:数据存放在全局区,在程序运行结束后,由操作系统释放。)

    什么是静态变量:在普通的变量前添加static就属于静态变量。(翻内存四区笔记)。

    这样返回的引用就不会因为函数的运行结束而被删除。

    运行一下:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    10
    10
    10

    但是,我们修改一下:

    #include 
    using namespace std;
    int& test2();
    int main()
    {
    int& ref = test2();
    cout << ref << endl;
    cout << ref << endl;
    test2() = 1000;
    cout << ref << endl;
    return 0;
    }
    int& test2()
    {
    static int a = 10; 
    return a;
    }

    仔细观察会发现。新增了一行:test2() = 1000;在这一行里面,函数test2变成了赋值的左值。

    运行一下:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    10
    10
    1000

    最后会发现,再次打印ref,数值变成 1000 了。

    test2返回的是a的引用。相当于返回的就是 a 了(而且这个还是静态变量,不会因为函数运行结束而被删除。)所以test2() = 1000;相当于就是a = 1000; 。而ref 就是 a 的别名。所以 a 变为了 1000,ref 也会变成 1000。

    如果函数的返回值是引用,那么这个函数调用可以作为左值

文章「cpp引用做函数的返回值」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/828」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇