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

C++ 赋值运算符重载详解

1. 赋值运算符重载的标准格式

核心要求

cpp

class T {
public:T& operator=(const T& rhs) {  // 参数类型:const T&if (this != &rhs) {       // 检测自赋值// 执行拷贝操作}return *this;             // 返回T&}
};
关键点解析
要素说明
参数类型const T&:避免拷贝开销,保护原对象不被修改
返回值类型T&:支持连续赋值(如 a = b = c),同时避免返回时的额外拷贝
自赋值检查if (this != &rhs):防止资源重复释放或逻辑错误
返回 *this返回赋值后的对象

2. 必须定义为成员函数的原因

  • 编译器强制行为
    如果用户未定义,编译器会自动生成一个默认的 operator=(称为合成拷贝赋值运算符)。
    如果允许全局重载,会导致二义性冲突

    cpp

    class T { /* 编译器生成默认 operator= */ };
    T& operator=(T& lhs, const T& rhs);  // 如果允许全局定义,调用时该选哪个?
  • 封装性要求
    赋值操作通常需要访问类的私有成员,定义为成员函数更符合面向对象设计原则(避免滥用友元)。

3. 默认生成的赋值运算符行为

规则
  • 内置类型:按字节浅拷贝(直接赋值,包括指针的地址值)。

  • 自定义类型成员:调用该成员的 operator= 完成赋值(递归处理)。

http://www.xdnf.cn/news/3701.html

相关文章:

  • 全局分割与实例分割技术对比:U-Net与Mask R-CNN
  • Python项目源码69:一键解析+csv保存通达信日线数据3.0
  • C++map和set
  • linux指令中的竖线(“|”)是干啥的?【含实例展示】
  • HTTP 状态码详解:用途与含义
  • QMK固件中LED指示灯与RGB灯详解指南
  • MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型
  • 组件通信-自定义事件
  • 基于SpringBoot+Vue实现的电影推荐平台功能一
  • SpringBoot基础(原理、项目搭建、yaml)
  • 【quantity】6 温度单位实现(temperature.rs)
  • wfp CommandParameter 详细解说
  • 数字智慧方案6190丨智慧应急综合平台解决方案(49页PPT)(文末有下载方式)
  • 开发规范-Restful
  • Android面试总结之jet pack模块化组件篇
  • GoogleTest:TEST_F
  • Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
  • 【OFDM过程中正交子载波特性的应用及全面解析】
  • C++负载均衡远程调用学习之HOOK注册机制
  • deepseek 技巧整理
  • 《Java高级编程:从原理到实战 - 进阶知识篇三》
  • 【算法应用】基于鲸鱼优化算法WOA求解VRPTW问题
  • Oracle无法正常OPEN(三)
  • ARConv的复现流程
  • btrace2.0使用方法
  • 基于FastApi实现本地部署DeepSeek-R1-Distill-Qwen与流式输出
  • 文章四《深度学习核心概念与框架入门》
  • 读书记:《认知红利》
  • 云盘系统设计
  • Vue3+Element Plus全套学习笔记-目录大纲