《C和C++代码精粹》——2.4 传引用语义
2023-09-11 14:17:38 时间
本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.4节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。
C和C++代码精粹
除非被告知用别的方法,否则C++总是通过值向函数传递参数。这意味着函数是局部地使用了每一个参数的拷贝。这种传递方式的结果是一个函数不可能在所调用的程序中改变对应的实参值。考虑下面的试图交换两个整型变量值的程序段:
void swap(int x, int y) int temp = x; x = y; y = temp;
诸如swap(a,b)这样的调用对于a和b都不会产任何效果。在退出函数后允许改变函数固定实参值的方式叫做“传递引用”。
程序清单2.6 用指针交换函数中实参的值
// swap2.cpp: 一个有用的交换函数 #include iostream using namespace std; void swap(int*, int*); main() int i = 7, j = 8; swap( i, cout "i == " i ", j == " j endl; void swap(int* xp, int* yp) int temp = *xp; *xp = *yp; *yp = temp; //输出: i == 8, j == 7
在C语言中,可以通过传递想要改变其值的参数的指针来仿真传引用语义。可以通过指针,改变在调用程序中的变量值(参见程序清单2.6)。传递引用对于大型对象和在面向对象系统中是很普通的,在面向对象操作中,指向一个对象的指针称为“句柄”。正如第1章中所解释的那样,通过引用,C++也直接支持传递引用。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
【奇妙的数据结构世界】用图像和代码对堆栈的使用进行透彻学习 | C++ 简单来说,数据结构是一种辅助程序设计并且进行优化的方法论,它不仅讨论数据的存储与处理的方法,同时也考虑到了数据彼此之间的关系与运算,从而极大程度的提高程序执行的效率,减少对内存空间的占用等。不同种类的数据结构适用于不同的程序应用,选择合适正确的数据结构,可以让算法发挥出更大的性能,给设计的程序带来更高效率的算法。
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++ 简单来说,数据结构是一种辅助程序设计并且进行优化的方法论,它不仅讨论数据的存储与处理的方法,同时也考虑到了数据彼此之间的关系与运算,从而极大程度的提高程序执行的效率,减少对内存空间的占用等。不同种类的数据结构适用于不同的程序应用,选择合适正确的数据结构,可以让算法发挥出更大的性能,给设计的程序带来更高效率的算法。
【奇妙的数据结构世界】用图像和代码对链表的使用进行透彻学习 | C++ 简单来说,数据结构是一种辅助程序设计并且进行优化的方法论,它不仅讨论数据的存储与处理的方法,同时也考虑到了数据彼此之间的关系与运算,从而极大程度的提高程序执行的效率,减少对内存空间的占用等。不同种类的数据结构适用于不同的程序应用,选择合适正确的数据结构,可以让算法发挥出更大的性能,给设计的程序带来更高效率的算法。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- 【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强
- Win10系列:VC++ Direct3D模板介绍1
- C++ 表达式语句 海伦的故事
- C# 视频监控系列(14):总结贴——VC++代码转成C#小结
- C++ 代码整洁之道
- C/C++基础讲解(六十七)之系统篇(彩色弹出菜单)
- C/C++基础讲解(二十三)之数据结构篇之魔王语言翻译与火车车厢重排
- C语言/C++基础之爱心程序源码(附源码)
- C语言/C++常见习题问答集锦(五十四) 之个性字符串
- Open3D (C++) 计算点云的归一化协方差矩阵和三维质心
- c++模板学习06之类模板与函数模板区别
- paip.c++ sqlite数据库操作总结
- 通过C语言或者C++编程语言结合ffmpeg拿到一些音视频的关键信息
- 【华为OD机试 2023最新 】 最长的密码(C++)
- 【华为OD机试 2023最新 】找数字、找等值元素(C++ 100%)
- 【华为OD机试 2023】 查找树中元素(C++ Java JavaScript Python)
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- C++ 将数组中元素为零的数移到最后
- c++ vector 初始化_C++--vector()的用法
- 数据结构 - 堆排序(heap sort) 具体解释 及 代码(C++)
- C++使用onnxruntime/opencv对onnx模型进行推理(附代码)
- Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
- C++类中静态变量
- VS2019: C++代码静态分析改进和更新
- VC++如何通过代码自动弹出Windows系统的一些窗口(附源码)
- 使用Windbg定位Windows C++程序中的内存泄露
- C++如何实现打开文件所在文件夹的功能(打开所在文件夹并选中文件)
- C++匿名函数
- C++中四种类型转换方式
- C++ 代码的性能优化
- 非递归遍历二叉树---c++写法
- C++11原子操作的经典代码以及讲解
- c++职工管理系统主函数代码
- 修正:C++编程经验(7):delete之后到底要不要置空?
- 【C++】算法集锦(1):八大排序算法 :GIF + 亲测代码 +专项练习平台
- C++代码优化方案(二)