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

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 = ; int b = ; int c=;
int z;
abc(a, b, c, z)++; //wrong: returning a const reference
cout << "z= " << z << endl;
SYSTEM("PAUSE");
return ;
}

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

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

C++中返回值的更多相关文章

  1. 在Java 线程中返回值的用法

    http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread  有时在执行线程中需要在线程中返回一个值:常规中我们 ...

  2. Lua中返回值的丢失问题

    Lua中返回值的丢失问题 -- 如果函数调用所得的多个返回值是另外一个函数的最后一个参数,或者是多指派表达式中的最后一个参数时,所有返回值将被传入或使用. -- 否则只有第一个返回值被使用或指定. T ...

  3. Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题

    在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...

  4. C#中返回值封装

    在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类: using System; using Syste ...

  5. ABAP SY-SUBRC 使用过程中返回值的几种含义

    当进行Debug的时候,经常会遇到"SY-SUBRC"的返回值.具体如何使用.在各种语句下返回值. ================= FUNCTION MODULE (或RFC中 ...

  6. IOS开发中返回值为null时的处理

    在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) {      NSLog(@"data is n ...

  7. Java中返回值的详解

    package com.company; //java中main()函数中调用其他方法的两种方式//1.实例化对象 public class returnDemo { public static vo ...

  8. C#调用C++ dll中返回值为字符串的函数问题

    C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...

  9. mybatis <sql /> 配置中 返回值 resultType 与resultMap的区别

    mybatis的objectMapper.xml中, 1) 若<sql /> 查询语句中配置的是resultType=“实体类/DTO” ,则从mybatis返回的键值对结果集(Map)会 ...

随机推荐

  1. 二本毕业,我是如何逆袭成为BAT年薪40W的Java工程师的?

    身边的师弟师妹经常问到:非计算机专业出身,你是在2年内如何逆袭成BAT年薪40W的资深开发工程师的.其实很简单——努力! 我16年毕业于普通的二本学校,非计算机专业出身,只因为对软件开发感兴趣,所以找 ...

  2. 快速排序Qsort

    快速排序Qsort是所有学习算法和数据结构最基础的一个部分,也是考试题和面试的一个小重点. 快速排序的时间复杂度为O(N*lgN),而且常数因子很小. 对于随机数据,效率特别高: 对于构造的恶意数据, ...

  3. BZOJ3832[Poi2014]Rally——权值线段树+拓扑排序

    题目描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byteburg are natural long di ...

  4. BZOJ5334 [TJOI2018] 数学计算 【线段树分治】

    题目分析: 大概是考场上的签到题.首先mod不是质数,所以不能求逆元.注意到有加入操作和删除操作.一个很典型的想法就是线段树分治.建立时间线段树然后只更改有影响的节点,最后把所有标记下传.时间复杂度是 ...

  5. day10 递归

    死循环,因此递归必须要定义一个明确的结束条件 def calc(n): print(n) calc(n) calc(10) return 表示终止符号,最终会得出一个确切的返回值,且可以赋值 def ...

  6. 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表 Items表记录了i ...

  7. 并发容器——ConcurrentHashMap

    ConcurreentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的HashMap. 为什么要使用ConcurrentHashMap 在并发编程中使用HashMa ...

  8. 【bzoj1507】 JSOI2008—Blue Mary的旅行

    http://www.lydsy.com/JudgeOnline/problem.php?id=1570 (题目链接) 题意 给出$m$个航班,每天只能做一次飞机,有$T$人从起点到终点,问最晚到达的 ...

  9. Luogu 1081 【NOIP2012】开车旅行 (链表,倍增)

    Luogu 1081 [NOIP2012]开车旅行 (链表,倍增) Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已 ...

  10. 使用php与mysql构建我们的网站

    技术这个玩意就是要不断的去使用,才能够熟能生巧.今天我记录的使用php与mysql构建我们的网站,其实是我两年前的时候写的项目. 现在看看自己以前写的个人项目,也会感叹时间究竟带走了什么?好记性不如烂 ...