C++编程:指针与引用的抉择
4星 · 超过85%的资源 需积分: 11 151 浏览量
更新于2024-12-01
1
收藏 635KB PDF 举报
"More Effective C++.pdf - 探讨C++中的指针与引用差异及其使用策略"
在C++编程中,指针和引用是两种重要的间接访问对象的方式,它们各有特点,适用于不同的场景。《More Effective C++.pdf》这本书深入探讨了这两种机制,并提供了实用的建议来帮助开发者做出明智的选择。
首先,指针与引用在语法上有所区别。指针使用`*`和`->`运算符来解引用和访问成员,而引用则通过简单的标识符(就像直接访问对象一样)来实现。然而,它们都能使我们间接地操作其他对象。
在决定何时使用指针、何时使用引用时,一个关键点是,引用必须始终引用某个对象,不能为NULL。这意味着如果变量可能在某些时刻不指向任何对象,那么应该使用指针,因为指针可以被赋值为空值。例如:
```cpp
char *pc = 0; // 设置指针为空值
char &rc = *pc; // 让引用指向空值,这是有害的
```
上面的代码会导致不确定的结果,甚至可能导致运行时错误。因此,我们应该避免让引用指向空值的情况。在C++中,引用在声明时必须初始化,例如:
```cpp
string &rs; // 错误,引用必须被初始化
string s("xyzzy");
string &rs = s; // 正确,rs引用s
```
相比之下,指针可以在声明时不初始化,但在使用前应检查是否为NULL:
```cpp
string *ps; // 未初始化的指针
// 合法但危险
```
引用的不可变性意味着它们提供了更高的效率,因为不必检查它们是否为空。例如,在函数`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"
```
《More Effective C++.pdf》这本书强调了理解和正确使用指针与引用的重要性,以提高代码的安全性和效率。开发者应根据具体需求和设计选择使用指针或引用,并遵循最佳实践,以编写更有效的C++代码。
2016-02-24 上传
2017-09-21 上传
2023-04-29 上传
2023-06-25 上传
2023-07-27 上传
2023-05-11 上传
2023-07-27 上传
2023-07-29 上传
fuminwen
- 粉丝: 0
- 资源: 8
最新资源
- Pickling-in-Python:快速,清晰地说明什么是酸洗以及为什么要使用它。 另外,还有一个腌制和解腌线性回归模型的示例。 祝您腌制愉快!
- AttendanceAutomation
- c代码-出租车记价表
- C:C语言
- abc-da-cozinha-后端
- SelectMutiImgDemo:选择图片上传(从相册选择、拍照)
- phaser-sprite-gui:检查和操作Phaser Sprite(通过dat.gui)。 移相器2CE
- datajoint-elements:DataJoint Elements是神经生理学实验的精选计算工作流的集合
- 蓝色面性图标下载
- Android高级应用源码-安卓桌面应用EyeRoom.rar
- zehner
- gaussdb.zip
- OOP2020:КодовиодаудиторискитевежбипоОбјектно-ориентиранопрограмирање(202021)кајдем。 дипл。 инж。 СтефанАндонов
- 国标测试级联工具v2.0.zip
- c代码-出租车记价表
- DiligentCore:Diligent Engine的核心功能