指针与引用的差异及高效选择
需积分: 11 184 浏览量
更新于2024-07-30
收藏 635KB PDF 举报
"《更有效的C++》指南深入探讨了指针与引用这两个在C++编程中至关重要的概念。虽然它们在外表和语法上有所不同,如指针使用星号(*)和减号(-),而引用使用的是&操作符,但实际上它们都提供了间接访问其他对象的能力。然而,选择使用哪种类型取决于具体场景。
首先,指针允许空值,可以通过`*pc = 0`设置为空,而引用一旦初始化就必须始终指向某个对象,因此当不确定变量是否始终指向对象时,应使用指针。例如,如果设计中可能有变量变为空的情况,声明为指针更为合适。另一方面,如果设计不允许变量为空,如字符串引用,应确保初始化,如`string s("xyzzy"); string& rs = s;`。
值得注意的是,试图通过引用赋空值,如`char& rc = *pc;`,是极其危险的,可能导致未定义行为,甚至可能导致程序崩溃。为了避免这类问题,C++语言规定引用不能指向空值,因此在使用引用时,无需检查其有效性,提高了代码效率。比如,在打印函数中,直接使用`void printDouble(const double& rd) { cout << rd; }`就足够,无需像`void printDouble(const double* pd) { if (pd) { cout << *pd; }}`那样进行额外的检查。
另外,指针的一个关键特性是可以动态改变所指向的对象,如`string s1("Nancy"); string s2("Clancy"); string* ps = &s1; ps = &s2;`,而引用一旦初始化后就不能更改指向,如`string& rs = s1; rs = s2;`,这使得引用在需要保持稳定引用的对象位置时更加方便。
总结来说,指针与引用在C++中各有优劣,理解它们之间的区别和适用场景是提升代码质量和效率的关键。通过合理的选择和使用,可以写出更有效、更安全的C++代码。"
2009-07-07 上传
2018-04-26 上传
2021-12-13 上传
2018-07-13 上传
clannadgirl
- 粉丝: 0
- 资源: 2
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码