zoukankan      html  css  js  c++  java
  • C++中返回值

        函数的返回值用于初始化在调用函数是创建的临时对象。

    1、返回值为非引用类型:

          会将函数的返回值复制给临时对象。跟实参初始化形参的方式一样。

    2、返回值为引用类型:

        没有复制返回值,返回的是对象本身。返回引用时,在函数的参数中要有以引用方式或指针方式传入的要返回的参数

         不能返回局部对象的引用。(因为函数执行结束,将释放分配给局部对象的存储空间,对局部对象的引用就会指向不确定的内存)

         

        int& abc(int a, int b, int c, int& result){
    
              result = a + b + c;
               return result;
        }
    
    
         这种形式也可改写为:
    
    
        int& abc(int a, int b, int c, int *result){
              *result = a + b + c;
              return *result;
        }
    
    
         但是,如下的形式是不可以的:
        int& abc(int a, int b, int c){
              return a + b + c;
        }
            const string &manip(const string &s)
    
            {
    
                string ret =s;
    
                return ret;  //wrong:returning reference to a local object
    
            }

     3. 返回const 类型:

        返回值不能被修改。由于返回值直接指向了一个生命期尚未结束的变量,因此,对于函数返回值(或者称为函数结果)本身的任何操作,都在实际上,是对那个变量的操作,这就是引入const类型的返回的意义。当使用了const关键字后,即意味着函数的返回值不能立即得到修改!如下代码,将无法编译通过,这就是因为返回值立即进行了++操作(相当于对变量z进行了++操作),而这对于该函数而言,是不允许的。如果去掉const,再行编译,则可以获得通过,并且打印形成z = 7的结果。

    include <iostream>
        include <cstdlib>
        const int& abc(int a, int b, int c, int& result){
              result = a + b + c;
              return result;
        }
    
    
        int main() {
          int a = 1; int b = 2; int c=3;
          int z;
          abc(a, b, c, z)++;  //wrong: returning a const reference
          cout << "z= " << z << endl;
          SYSTEM("PAUSE");
          return 0;
        }

    1,什么时候返回引用是正确的?而什么时候返回const引用是正确的? 

        返回指向函数调用前就已经存在的对象的引用是正确的。当不希望返回的对象被修改时,返回const引用是正确的。

  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7092333.html
Copyright © 2011-2022 走看看