C++基础知识(八)---函数返回值(返回值,返回指针,返回对象,返回引用)---引用---复制构造函数(拷贝构造函数)

一、函数返回值

  1.返回值:

int test ()
{
int a=1;
return a;
}
  • 返回值时最简单的方式,它的操作主要在栈上,变量a在函数结束后会删除,为了返回a的值,系统会在内部建立一个临时变量保存a的值,以返回给调用该函数的表达式,调用结束后变量便不再存在。如果a是简单地数据类型也无所谓,不是很占用内存,如果a是大的自定义类型的数据,那么对a的复制将会占用比较大的内存。函数返回值是右值,不能进行运算符操作。

  2.返回指针:

  • int *test2()
    {
    int *b=new int();
    *b=2;
    return b;
    }
    • 返回指针是在C中除了返回值以外的唯一方式,根据函数栈的特性,也会产生复制,只是复制的是一个指针即一个地址,对于返回大型对象可以减少不少的资源消耗。但返回指针的资源的清理交给了调用者,这违反了谁申请谁销毁的原则。指针也是右值同样无法操作。

  3.返回引用:

  • int& test2()
    {
    int *b=new();
    *b=2;
    return b;
    }
    • 引用是值的别名,和指针一样不存在对大对象本身的复制,只是引用别名的复制。引用是左值,可以直接进行操作,也可以进行连续赋值,最经典的实例是拷贝构造函数与运算符重载一般都返回引用。
    • 需要注意的是局部变量不能作为引用返回。

  • C++中成员函数返回对象与返回引用

    • 返回对象与返回引用的区别:函数原型与函数头

      • Car run(const Car&)//返回对象
      • Car& run(const Car&)//返回引用
    • 返回对象涉及到生成对象的副本。因此返回对象的成本包括了调用复制构造函数来生成副本所需要的时间和调用析构函数删除副本所需要的时间。返回引用可以节省时间和内存。直接返回对象与函数直接return a返回值一样。都会生成临时副本。




二、C++中的引用

  1.吃饭回来继续补充

原文地址:https://www.cnblogs.com/southcyy/p/10256378.html

时间: 2024-10-27 07:13:20

C++基础知识(八)---函数返回值(返回值,返回指针,返回对象,返回引用)---引用---复制构造函数(拷贝构造函数)的相关文章

php基础知识【函数】(8)xml和变量函数

 一.XML函数 参数类型 data    --string,需要解析的数据集. parser  --resource,一个指向要取得字节索引的 XML 解析器的引用.  1.创建和释放XMl解析器 xml_parser_create([string encoding]) --建立一个新的 XML 解析器并返回可被其它 XML 函数使用的资源句柄. xml_parser_free(parser) --释放指定的 XML 解析器 2.获取错误信息 xml_error_string (code) -

C/C++基础知识:函数指针和指针函数的基本概念

[函数指针] 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址.可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针. 1.函数指针定义 函数类型 (*指针变量名)(形参列表): “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表. 例如: int (*f)(int x); double (*pt

深入理解python(四)python基础知识之函数

函数部分 函数部分大概想分成两个部分来讲,第一部分是关于对函数参数的介绍,第二部分是局部变量全局变量和内置变量也就是变量作用域的LGB原则 函数的参数 1.关于形参和实参的问题 第一点要注意的是python中形参和实参的问题. 以不可变对象为参数,不会修改不可变对象的值(形参和实参的原因) 但对于可变对象(例如列表字典等),会在原地修改对象的值 例: >>> def immutableob(a):#在函数中修改不可变对象的值 ... a+=1 >>> b=1 >&

PHP面试 PHP基础知识 八(会话控制)

---恢复内容开始--- PHP会话控制技术 首先了解一下为什么要使用会话控制技术? 本身web 与服务器的交互是通过HTTP协议来实现的,而HTTP协议又是无状态协议.就是说明HTTP协议没有一个內建机制来维护web与服务器之间的状态.所以同一个用户请求同一个页面两次的时候,HTTP协议不会认为这两次请求来自同一个web,会把这两次请求隔离开.会认为是两个不同的用户来请求的.如果这个用户执行了登陆操作,再次请求页面.HTTP协议不会认为该用户做过登陆操作.因为HTTP协议无法保留登陆状态,无法

php基础知识【函数】(7)url和ob函数

一.URl函数 1.urlencode -- 编码 URL 字符串 2.urldecode -- 解码已编码的 URL 字符串 3.rawurlencode -- 按照 RFC 1738 对 URL 进行编码 4.rawurldecode -- 对已编码的 URL 字符串进行解码 5.base64_encode -- 使用 MIME base64 对数据进行编码 6.base64_decode -- 对使用 MIME base64 编码的数据进行解码 7.parse_url -- 解析 URL,

C语言基础知识【函数】

C 函数1.函数是一组一起执行一个任务的语句.每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数.您可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的.函数声明告诉编译器函数的名称.返回类型和参数.函数定义提供了函数的实际主体.C 标准库提供了大量的程序可以调用的内置函数.例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置

python基础知识(函数2)

返回值 return return[value]  多个值用,逗号分开,没有返回值,会返回none值,函数不给指定返回值也会返回none值 def functionname(p1,p2,p3): return value1,value2.... result = functionname(value1,value2,value3) 变量的作用域是指代码能够访问该变量的区域,如果超出该区域,在访问时就会出现错误. 局部变量 在函数内部定义只在函数内部有效. 全局变量 在函数体内和函数体外都可以使用

php基础知识【函数】(9)数学和对象类函数

一.数学  abs -- 绝对值 ceil -- 进一法取整 floor -- 舍去法取整 fmod -- 返回除法的浮点数余数 round -- 对浮点数进行四舍五入 sqrt -- 平方根 pi()/M_PI  -- 得到圆周率值 is_nan -- 判断是否为合法数值 is_finite -- 判断是否为有限值 is_infinite -- 判断是否为无限值 max -- 找出最大值,max(num1,num2,num3... ),max (array(num1,num2,num3...)

Java基础知识(八)

一.HashMap<K,V>集合 1.概述(1)本身基于哈希表,可以保证键的唯一性.(2)Map集合只针对键有效,当集合中出现两个键一样时,后者所对应的值会覆盖掉前者所对应的值存储.2.常见存储类型(1)HashMap<String,String>:(2)HashMap<Inreger,Inreger>(3)HashMap<Student,String>:(4)HashMap<String,Student>3.当键的类型不同时(1)键为自定义类型

Python基础知识之函数、模块

1.Python模块. Python一个.py后缀的文件,称为模块.Python模块可以包含变量.函数.类,同时类中又可以定义变量和函数. 2.Python模块导入. (1) Python模块全部导入方式:from 模块名 import * (2) Python模块按需导入方式:from 模块名 import 函数名/类名 3.函数.常用函数如下. str(o):将数字转化为字符串函数, int(o):将字符串转化为数字函数. format():字符串格式化函数. replace:字符串替换函数