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

时间: 2024-10-12 03:49:24

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

在Java 线程中返回值的用法

http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread 有时在执行线程中需要在线程中返回一个值:常规中我们会用Runnable接口和Thread类设置一个变量:在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的:我们需要一定的机制来保证. 在在Java se5有个Callable接口:我们可以用该接口来完成该功能: 代码如: Java代码   package com.thr

C#中返回值封装

在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Runtime.Serialization; 6 7 8 namespace WindowsFormsApplication31 9

java中返回值和参数理解

1.什么是对象,为什么需要对象? 对象是类的一个实例(对象不是找个女朋友),有状态和行为.万物皆对象! 2.什么是函数,为什么需要函数? 习惯把函数也叫成方法,都是一个意思:函数是具备特定功能的一段代码块,解决了重复性代码的问题.目的是为了提高程序的复用性和可读性. 3.什么是函数的返回值,什么是函数的参数? 函数返回值就是你所调用的函数返回给你的值.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效.实参:传递给被调用方法

mybatis &lt;sql /&gt; 配置中 返回值 resultType 与resultMap的区别

mybatis的objectMapper.xml中, 1) 若<sql /> 查询语句中配置的是resultType=“实体类/DTO” ,则从mybatis返回的键值对结果集(Map)会直接赋值给该DTO(根据set()/get()方法,因此该DTO属性名要与表字段名一致,若不一致,可再sql查询语句中用as 更换查出来表字段名)中相映射的属性值,而与该mappper.xml文件配置<mapper/>里的<resultMap />无关. 2)若<sql />

springboot中返回值json中null转换空字符串

在实际项目中,我们难免会遇到一些无值.当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢? Jackson中对null的处理 1 @Configuration 2 public class JacksonConfig { 3 @Bean 4 @Primary 5 @ConditionalOnMissingBean(ObjectMapper.class) 6 public ObjectMapper jacksonObjectM

myBatis中的注解@Param、返回值为Map、JAVA读取Excel并解析文本、Class.getResource()和ClassLoader.getResource()

myBatis中的注解@Param:http://blog.csdn.net/gao36951/article/details/44258217:  http://www.cnblogs.com/thomas12112406/p/6217211.html. myBatis返回值为Map:http://blog.csdn.net/werewr342352321df/article/details/11892755. ====================== JAVA读取Excel并解析文本:h

struts2在配置文件中调用Action的方法返回值

struts2在配置文件中可以调用Action的方法返回值 1.Action中 //文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (Un

JSF页面中使用js函数回调后台bean方法并获取返回值的方法

由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的,很可能会误导使用者. 相对来说,看国内的那些仅仅是翻译过来的文章或书籍不如直接看国外的官方文档或资料来的实在,在我讲述jsf页面中如何使用js调用后台bean方法之前,先给大家说几个国外的资料.在primefaces官方网站上,你可以搜索到几乎所有你需要的东西,primefaces官网为:http:

鼠标左中右键返回值的兼容性问题

标准浏览器下鼠标左中右键返回值分别是0,1,2,但是IE8及以下版本浏览器返回的却是1,4,2,兼容代码如下 document.onmousedown = function(event){ alert(getButton(event)); } function getButton(event){ evt = event || window.event; if(event){ return event.button; }else{ switch(evt.button){ case 1: retur