复制实参的局限性

1当需要在函数中修改实参的值时;

2当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的 时间和存储空间代价往往过大;

3当没有办法实现对象的复制时。

对于上述几种情况,有效的解决方法是将形参定义为引用或指针类型。

时间: 2024-11-08 18:28:22

复制实参的局限性的相关文章

C++ Primer 复习杂记(第七章)

复制实参的局限性(值传递) 不适合复制实参的情况包括: 当需要在函数中修改实参的值时. 当需要以大型对象作为实参传递时.对实际的应用而言,复制对象所付出的时间和存储空间代价往往过大. 当没有办法实现对象的复制时. 通过引用传递数组 通常,数组以非引用类型传递,此时数组会转换为指向第一个元素的指针,形参中数组大小并没有意义.然而如果形参是数组的引用,则编译器不会将数组实参转化为指针,而是传递数组引用本身.此时数组大小会由编译器进行检查. 例: void printValues(int (&arr)

C++ Primer 4th 读书笔记(第一部分)

虽然,有一定的c++基础(因为本科就学会了这一种,哈哈),但是还是决定系统的读一遍这本书(之前有零星看过数次..汗). 留作自己以后参考.(内容会不定期更改,不断学习(此处应为长音~~)) 大部分都是自己掌握的不够扎实的地方和以前没有注意的一些细节. 书中好多地方,详述了知识出现的缘由,最起码是指出为了解决什么问题而出现的!! 前言部分 1."...大量使用了前后交叉引用..."(挺适合自己的,我想知道原文是怎么的,希望以后有机会对原版的时候补充~) 2.作者对本书的定位是本指南性读物

C++学习笔记3

函数小结 : 函数是有名字的计算单元,对程序(就算是小程序)的结构化至关重要.函数的定义由返回类型.函数名.形参表(可能为空)以及函数体组成.函数体是调用函数时执行的语句块.在调用函数时,传递给函数的实参必须与相应的形参类型兼容. 给函数传递实参遵循变量初始化的规则.非引用类型的形参以相应实参的副本初始化.对(非引用)形参的任何修改仅作用于局部副本,并不影响实参本身. 复制庞大而复杂的值有昂贵的开销.为了避免传递副本的开销,可将形参指定为引用类型.对引用形参的任何修改会直接影响实参本身.应将不需

c++内容复习之函数

形参与实参的区别 函数的形参为函数提供了已命名的局部存储空间.形参是在函数的形参表中定义的,并由调用函数时传递给函数的实参初始化. 实参与形参必须有类型相同或者可以隐式转换. 形参的初始化与变量的初始化一样,如果形具有非引用类型,则复制实参的值,如果形参为引用类型,则只是实参的别名. 对形参修改的函数,不会改变实参的值,只是修改实参的副本. 1.指针形参 函数可通过指针实现赋值,修改指针所指向对象的值. 2.const形参 复制实参的局限性 当需要在函数中修改实参的值时. 当需要大型对象作为实参

C++primer第七章 函数

本章将介绍函数的定义和声明.然后具体分析三类特殊的函数:内联(inline)函数.类成员函数和重载函数. 7.1. 函数的定义 函数由函数名以及一组操作数类型唯一地表示.函数的操作数,也即形参,在一对圆括号中声明,形参与形参之间以逗号分隔.函数执行的运算在一个称为函数体的块语句中定义.每一个函数都有一个相关联的返回类型. 函数的调用 C++ 语言使用调用操作符(即一对圆括号)实现函数的调用.正如其他操作符一样,调用操作符需要操作数并产生一个结果.调用操作符的操作数是函数名和一组(有可能是空的)由

关于函数形参的一些讨论

形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名. 非引用形参: 普通的非引用类型的参数通过复制对应的实参实现初始化.当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值. while 循环体虽然修改了 v1 与 v2 的值,但这些变化仅限于局部参数,而对调用 gcd 函数使用的实参没有任何影响.于是,如果有函数调用gcd(i, j),i 与 j 的值不受 gcd 内执行的赋值操作的影响. #includ

C++ Primer(第4版)-学习笔记-第1部分:基本语言

第1章  快速入门 每个C++程序都包含一个或多个函数,而且必须有一个命名为main. main函数是唯一被操作系统显式调用的函数,main函数的返回值必须是int或者void(无返回值) 函数体是函数定义的最后部分,是以花括号开始并以花括号结束的语句块: 注释 C++ 中有单行注释和成对注释两种类型的注释.单行注释以双斜线(//)开头,行中处于双斜线右边的内容是注释,被编译器忽略. 另一种定界符,注释对(/* */),是从 C 语言继承过来的.这种注释以“/*”开头,以“*/”结尾.编译器把落

7.1——函数

函数的定义: (1)函数体是一个作用域,函数体是一个语句块,定义了函数的具体操作 (2)函数的形参类似于局部变量,只是区别是它是在函数的形参列表中定义的. (3)C++是一种静态强类型语言,对于每一次函数调用,编译时都会检查其实参的类型,必须是与形参相同或者可以转化 参数的传递: (1)当参数为非引用时,调用时形参复制实参的值 (2)当参数为引用时,调用时形参是实参的别名. 非引用形参: (3)当形参为const的非引用时,调用时可以传递const实参也可以是非const的实参,只是在函数中不能

C++ Primer 学习笔记_54_类与数据抽象 --复制构造函数、赋值操作符

复制控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,需要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数:具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式的使用复制构造函数:当将该类型的对象传递给函数或者从函数返回该类型的对象时,将隐式使用复制构造函数.     析构函数:作为构造函数的互补,当对象超出作用域或动态分配的对象被删除