读书笔记之C++的引用与指针

本文详细对比了C++中引用与指针的特点及使用差异。引用在创建时必须初始化,不能为NULL且不可更改所引用的对象;而指针则更加灵活但也更危险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用的特性及其与指针的比较如下:
(1)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值;
(2)不存在NULL引用,引用必须与合法的存储单元关联;而指针可以是NULL。如果把一个引用初始化为0,例如:
const int& rInt = 0;
其语义并非是把引用初始化为NULL,而是创建一个临时的int对象并用0来初始化它,然后再用它来初始化引用rInt,而该临时对象将一直保留到rInt销毁的时候才会销毁。所以,不要用字面常量来初始化引用;
(3)引用一旦被初始化为指向一个对象,它就不能被改变为对另一个对象的引用(即“从一而终,矢志不渝”);而指针在任何时候都可以改变为指向另一个对象。给引用复制并不是改变它和原始对象的绑定关系。但指针就大不一样了。
(4)引用的创建和销毁并不会调用类的拷贝构造函数和析构函数;
(5)在语言层面,引用的用法和对象一样;在二进制层面,引用一般是通过指针来实现的,只不过编译器帮我们完成了转换。


引用既有指针的效率,又具有变量使用的方便性和直观性。
“引用传递”的性质像“指针传递”,而书写方式像“值传递”。实际上“引用”可以做的任何事情,“指针”都能够做,为什么还要“引用”呢?
答案是:“用适当的工具做恰如其分的工作”。“引用”体现了最小特权原则,即给予程序元素足以完成其功能的最小权限。指针能够毫无约束地操作内存中的任何东西,尽管功能强大,但是非常危险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值