当前位置: 首页 > article >正文

More Effective C++ 条款 1:仔细区别 pointer 和 reference

文章目录

    • 条款 1:仔细区别 pointer 和 reference
      • 区别与适用场景
      • 示例:`reference` 始终绑定对象
      • 示例:`pointer` 灵活性
      • `reference` 的限制与用途
      • 总结

条款 1:仔细区别 pointer 和 reference

区别与适用场景

  1. reference 不存在 null 状态

    • reference 必须始终代表某个对象。
    • 如果需要一个变量可能为空(即指向“无对象”),应选择使用 pointer
  2. pointer 的灵活性

    • pointer 可以被重新赋值,指向不同的对象。
    • reference 一旦绑定到一个对象,就无法更改。
  3. 使用场景

    • 使用 pointer:当变量可能不指向任何对象,或者需要在多个对象之间动态切换时。
    • 使用 reference:当变量始终必须表示某个对象,并且不允许为空时。

示例:reference 始终绑定对象

以下代码展示了 reference 的特性,确保始终绑定对象:

int a = 10;
int& ref = a;  // ref 必须绑定到 a,且不能更改绑定
int b = 20;
ref = b;       // 修改的是 a 的值,而非改变 ref 的绑定

示例:pointer 灵活性

pointer 的灵活性允许指向不同对象,甚至表示“无对象”:

int a = 10, b = 20;
int* ptr = &a;  // 指向 a
ptr = &b;       // 重新指向 b
ptr = nullptr;  // 表示“无对象”

reference 的限制与用途

  1. reference 不可重新绑定,始终指向初始化时的对象。
  2. 当实现某些操作符(如 operator[])时,必须使用 reference,因为语法需求无法通过 pointer 达成:
class Array {
private:
  int data[10];
public:
  int& operator[](size_t index) { return data[index]; }
};

Array arr;
arr[0] = 42;  // 使用 reference,返回 data[index] 的直接引用

总结

  • 使用 reference 确保变量始终指向一个有效对象,避免 null 状态。
  • 使用 pointer 实现灵活性,允许变量表示“无对象”或动态更改指向对象。
  • 根据变量的使用需求,选择合适的工具。

http://www.kler.cn/a/452867.html

相关文章:

  • C++软件设计模式之装饰器模式
  • 洛谷 P1014:Cantor 表
  • git设置项目远程仓库指向github的一个仓库
  • cad学习 day7-9
  • C++之零碎知识点记录
  • CSS系列(27)- 图形与滤镜详解
  • Leetcode经典题17--两数之和
  • 记我的Springboot2.6.4从集成swagger到springdoc的坎坷路~
  • Java 中的ArrayList常用方法总结
  • mysql mmm和mha对比
  • 记录学习《手动学习深度学习》这本书的笔记(六)
  • MySQL数据库——数据类型,索引,事务,优化
  • vue-计算两个日期之前的天数小方法
  • iptables一些笔记,始于安装ssr过程中防火墙问题
  • VLM--CLIP作分类任务的损失函数
  • 一文了解Oracle数据库如何连接(2)
  • 【Rust自学】7.1. Package、Crate和定义Module
  • Maven怎么会出现一个dependency-reduced-pom.xml的文件
  • MongoDB数据库安全
  • centos系统如何安装kubectl和部署kube-apiserver
  • 基于微信小程序的校园访客登记系统
  • 解读 Edge SCDN构建安全高效的网络护盾
  • 【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
  • Java基础(Json和Java对象)
  • VSCode 插件开发实战(四):使用 React 实现自定义页面
  • [x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上