zoukankan      html  css  js  c++  java
  • 引用与局部变量的返回问题

    今天刚相对彻底的搞懂函数返回局部普通变量(不包括指针和引用)与局部指针、引用的返回区别,先看下面代码

    #include <IOSTREAM>
    #include <STRING>
    using namespace std;
    
    string version1(const string &s1,const string &s2);
    const string & version2(string &s1,const string &s2);
    const string &version3(string &s1,const string &s2);
    
    int main()
    {
        string input;
        string copy;
        string result;
    
        cout<<"Entry a string: ";
        getline(cin,input);
        copy = input;
        cout<<"Your string as entered: "<<input << endl;
        result = version1(input,"****");
        cout<<"your string enhanced: "<<result <<endl;
        cout<<"your original string: " <<input << endl;
        
        result = version2(input,"#####");
        cout<<"your string enhanced: "<<result <<endl;
        cout<<"your original string: " <<input << endl;
    
        cout << "Resetting original string \n";
        input = copy;
        result = version3(input,"@@@");
        cout<<"your string enhanced: "<<result <<endl;
        cout<<"your original string: " <<input << endl;
        
    
        return 0;
    }
    
    string version1(const string &s1,const string &s2)
    {
        string temp;
        temp = s2+s1+s2;
        return temp;
    }
    
    const string & version2(string &s1,const string &s2)
    {
        s1 = s2+s1+s2;
        return s1;
    }
    
    const string &version3(string &s1,const string &s2)
    {
        string temp;
        temp = s2+s1+s2;
        return temp;    
    }

    当函数执行version1时能够很顺利的通过,当执行version3时会导致程序崩溃。
    当函数的返回类型是普通变量时,return时会把值cp一个临时变量,就像函数按值传参,如果函数返回的是一个引用或指针类型时,它不会发生按值传递那样的cp,相反它会被函数释放掉,(这个过程可以联想到我们按地址传值和引用传参的过程,函数内部可以直接进行对原数据的更改)如果还使用它的返回值,会发生意想不到的结果。

  • 相关阅读:
    Android Studio运行Hello World程序
    WPF,回车即是tab
    phpmyadmin上在某数据库里创建函数
    thinkphp项目部署在phpstudy里的nginx上
    《原创视频》牛腩学docker简记
    visual studio添加docker支持简记
    edge 浏览器中数字显示为链接
    JSON.net 在实体类中自定义日期的格式
    让easyui 的alert 消息框中的确定按钮支持空格键
    修复百度编辑器(UM)禁用时上传图片按钮还可点击的BUG;
  • 原文地址:https://www.cnblogs.com/onlycxue/p/2800060.html
Copyright © 2011-2022 走看看