码迷,mamicode.com
首页 > 编程语言 > 详细

C++中返回值

时间:2017-06-29 10:10:20      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:复制   res   一个   class   函数   引用类型   空间   strong   ios   

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

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引用是正确的。

C++中返回值

标签:复制   res   一个   class   函数   引用类型   空间   strong   ios   

原文地址:http://www.cnblogs.com/fanhaha/p/7092333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!