C++编程:指针与引用的抉择
需积分: 11 124 浏览量
更新于2024-10-28
收藏 635KB PDF 举报
"《More Effective C++》是一本经典的C++教材,主要探讨了C++编程中的高级主题和最佳实践。书中提到了指针和引用这两个核心概念,并深入比较了它们之间的区别和使用场景。"
在C++编程中,指针和引用是两种常见的间接访问对象的方式,虽然它们在外观和功能上有些相似,但在实际应用中有着本质的不同。条款一重点讨论了何时选择指针,何时选择引用。
首先,引用必须始终引用一个有效的对象,不能设置为NULL或空值。这意味着一旦引用被初始化为某个对象,它就不能改变引用的对象。相反,指针可以被设置为NULL,也可以改变以指向不同的对象。这种特性使得指针在处理可能为空的情况时更为灵活,而引用则在确保对象存在的场景下提供了更安全的访问。
考虑以下代码示例:
```cpp
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空值,这是不安全的
```
这段代码会导致未定义的行为,因为引用`rc`试图绑定到一个空值,这是禁止的。在C++中,引用必须在声明时进行初始化,并且不能改变引用的目标。
另一方面,引用的这种特性也带来了效率上的优势。由于引用总是有效的,所以在使用引用时无需进行空指针检查,如`printDouble`函数所示:
```cpp
void printDouble(const double& rd) {
cout << rd; // 不需要测试rd,它肯定指向一个double值
}
```
而使用指针时,为了防止空指针异常,通常需要进行非空检查:
```cpp
void printDouble(const double* pd) {
if (pd) { // 检查是否为NULL
cout << *pd;
}
}
```
此外,指针可以被重新赋值以指向另一个对象,这在某些动态数据结构或算法中是必需的:
```cpp
string s1("Nancy");
string s2("Clancy");
string& rs = s1; // rs引用s1
string* ps = &s1; // ps指向s1
rs = s2; // rs仍旧引用s1,但s1的值现在是"Clancy"
```
在这个例子中,`rs`引用`s1`的值,而`ps`指向`s1`的地址。尽管`rs`的值(即`s1`)可以改变,但`rs`本身仍然引用`s1`,不会改变引用的目标。
《More Effective C++》中的条款一提醒程序员在选择使用指针还是引用时,要考虑安全性、效率和代码的可读性。指针适用于需要空值检查或动态改变目标对象的场合,而引用更适合于需要提供安全、固定引用的场合,如函数参数传递和成员函数的this指针。理解这些基本概念对于编写高效、可靠的C++代码至关重要。
653 浏览量
2010-05-26 上传
2007-07-04 上传
2008-05-28 上传
2011-05-16 上传
2007-10-12 上传
2024-11-13 上传
jingwenh
- 粉丝: 1
- 资源: 5
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载