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

C++中的 赋值和初始化

在 C# 中,绝大多数类型都是引用类型(Reference Types),由 GC 托管,你可能习惯了 var a = new Class(); 这种写法。

但在 C++ 中,内存模型是显式的。初始化和赋值在底层指令、性能开销以及对特定成员(如 const 或 引用)的处理上有着本质的区别。


1. 核心定义:从“出生”到“变迁”

  • 初始化(Initialization): 在对象创建时为其分配初值。它伴随着内存的分配和构造函数的调用。

  • 赋值(Assignment): 在对象已经存在(已经出生)的情况下,改变它原有的值。它对应的是 operator= 操作符。


2. 语法层面的差异

在 C++ 中,初始化的写法非常多(这就是所谓的“初始化地狱”),而赋值相对单一。

初始化的几种姿势

int a = 10;          // 拷贝初始化 (Copy initialization)
int b(20);          // 直接初始化 (Direct initialization)
int c{30};          // 列表初始化 (List initialization,C++11后推荐,能防止类型缩窄)

赋值的姿势

int a;              // 此时 a 已被初始化(如果是全局变量为0,局部变量则是随机值)
a = 100;            // 这才是赋值

3. 为什么 C++ 程序员更在意初始化?

在 C# 中,你可能不太担心先声明再赋值。但在 C++ 中,有三个场景必须使用初始化,赋值是行不通的:

A. 常量(const)和引用(&)

这两类变量在 C++ 中一旦“出生”就必须确定身份,且无法更改。

const int x; // 错误!必须初始化
x = 10;      // 错误!不能赋值int &ref = a; // 正确
int &ref2;    // 错误!引用必须初始化

B. 类成员的“初始化列表”(Constructor Initialization List)

这是 C# 开发者最容易忽略的地方。在 C++ 构造函数中,使用初始化列表是真·初始化,而在大括号里写 = 则是先初始化再赋值

class MyClass {string name;
public:// 推荐做法:初始化列表MyClass(string s) : name(s) {} // 不推荐做法:先默认初始化 name,再赋值/*MyClass(string s) {name = s; }*/
};

性能差异: 后者会先调用 string 的默认构造函数,再调用 string 的赋值操作符,白白浪费了一次操作。


4. 底层原理:构造函数 vs 赋值运算符

对于复杂对象(类),这两者调用的成员函数完全不同:

特性 初始化 赋值
调用函数 拷贝构造函数 T(const T&) 拷贝赋值运算符 T& operator=(const T&)
状态 对象从无到有,不需要清理旧资源 对象已存在,通常需要先清理旧资源(如释放内存)
返回值 无返回值 通常返回对象的引用 T&

5. 总结:给 C# 转 C++ 学习者的建议

  1. 习惯使用 {} 初始化: 比如 int x{5};。这在 C++ 中被称为“统一初始化”,它能避免很多奇怪的语法歧义(比如著名的 Most Vexing Parse)。
  2. 构造函数首选初始化列表: 永远优先在 : 后面写成员初始化,而不是在 {} 里面写赋值。
  3. 理解“移动”语义: C++11 之后,初始化和赋值又演化出了“移动初始化”和“移动赋值”,这比 C# 的引用传递更底层,能极大地优化大内存对象的处理效率。
http://www.jsqmd.com/news/421069/

相关文章:

  • 互联网大厂Java面试场景:从基础到微服务与云原生
  • 实测才敢推AI论文平台,千笔 VS 笔捷Ai,专科生写作更省心!
  • 从全栈开发到微服务架构:一场真实的技术面试
  • 2026年2月防火卷帘门企业推荐,消防验收无忧与合规生产厂家 - 品牌鉴赏师
  • Appium跨平台测试的致命陷阱与系统性规避策略
  • 用过才敢说!专科生必备的降AIGC网站 —— 千笔·降AIGC助手
  • 全自动超声波气象站
  • 可可收科普:闲置立减金别乱处理!这 4 个误区正在坑人 - 可可收
  • 2026年有名的直播带货培训公司推荐,浙江育达教育值得关注 - mypinpai
  • 科研党收藏!圈粉无数的AI论文软件 —— 千笔ai写作
  • 便携式EL测试仪
  • 推荐MySQL中的这10种高级用法
  • 2026口碑不错的装饰一体板定制厂家排行,别错过,真空绝热板保温装饰一体板,装饰一体板生产厂家推荐 - 品牌推荐师
  • 建议收藏|小白程序员必看:AI 时代不会被淘汰,从零入门大模型应用开发全路径
  • 在线培训考试系统哪个好?全维度选型指南与深度解析
  • 【山海鲸实战案例】通过跟随相机设置无人机视角巡航
  • 分析溪山里酒店创新能力怎么样,在贵阳酒店行业排名如何? - 工业推荐榜
  • 终于有人把牛客网上的Java面试八股文整理成了PDF合集(Java基础+Redis+MySQL+多线程与高并发+JVM+分布式+Spring+微服务)
  • 收藏 | LangGraph+MCP+ReactAgent:小白也能学会构建智能代理系统,解锁大模型进阶玩法
  • 2026年高端月子会所最新推荐:西安金月汇/金月子以标准化领先行业 - 深度智识库
  • 基于PLC的喷泉控制系统设计商品介绍
  • 哪个平台更适合你?独立站社媒引流深度指南
  • 2026年月子中心加盟指南:为何西安金月汇成为行业投资首选? - 深度智识库
  • 2026年江苏好用的公司认证正规企业推荐与选购指南 - 工业设备
  • 从盲目调参到有的放矢:构建机械故障诊断算法的系统性工程思维
  • 2026年月子中心TOP5加盟分析报告:五大机构深度解析与优选策略出炉! - 深度智识库
  • paperzz:本科毕业论文「AI 创作加速器」,把 “毕业大考” 变成 “高效通关”
  • GEO优化排名服务商品牌众多,大湾区有哪些值得推荐的 - myqiye
  • Pytest自动化测试详解
  • PE管道缺陷波纹胶装管道缺陷检测数据集VOC+YOLO格式1053张1类别