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

c++ 类的成员初始化

c++ 类的成员初始化

  • 成员变量初始化
  • 基类初始化

成员变量初始化

对于类成员变量的初始化,成员初始化列表比在构造函数体内赋值更高效。

class MyClass 
{
public:// 方式1:成员初始化列表(推荐)MyClass() : num(10), str("hello") {}// 方式2:构造函数体内赋值(效率较低)MyClass() {num = 10;   // 这里实际是赋值操作,不是初始化str = "hello"; // 先调用默认构造函数,再调用赋值运算符}private:int num;std::string str;
};

对于非 POD 类型的成员变量(如 std::string, 自定义类等),使用初始化列表可以避免不必要的默认构造+赋值的开销:

class Performance 
{
public:// 高效:直接调用 std::string 的构造函数Performance() : str("hello") {}// 低效:先调用默认构造函数生成空字符串,再赋值Performance() { str = "hello"; }private:std::string str;
};

对于以下类型的成员变量,必须使用初始化列表:const 常量成员, 引用成员, 没有默认构造函数的类类型成员

class MustUseInitializerList 
{
public:MustUseInitializerList(int& ref) : const_value(42),  // const 成员必须初始化my_ref(ref),      // 引用成员必须初始化no_default_ctor(100)  // 没有默认构造函数的成员必须初始化{}private:const int const_value;int& my_ref;class NoDefault {public:NoDefault(int x) {}  // 没有默认构造函数} no_default_ctor;
};

基类初始化

当你的类继承自基类时,必须在成员初始化列表中调用基类的构造函数:

class Base 
{
public:Base(int value) { /* ... */ }
};class Derived : public Base 
{
public:// 正确:通过初始化列表调用基类构造函数Derived() : Base(42) { /* ... */ }// 错误:若基类没有默认构造函数,这样写会编译失败// Derived() { /* 这里无法调用 Base 的构造函数 */ }
};
http://www.dtcms.com/a/186050.html

相关文章:

  • Android 中 Handler (创建时)内存泄漏问题及解决方案
  • js滚动条保持在最底部的方法,场景:聊天室
  • 机架式服务器是什么?机架式/塔式/刀片式三大服务器类型区别与选型全解析
  • android studio开发aar插件,并用uniapp开发APP使用这个aar
  • 大模型数据分析破局之路20250512
  • std::move 和 std::forward
  • 2025年网站安全防御全解析:应对DDoS与CC攻击的智能策略
  • 如何使用快捷键打开 Microsoft Word 和其他 Windows 应用程序
  • Porting Linux to a new processor architecture, part 1: The basics
  • 2025年best好用的3dsmax插件和脚本
  • Kaamel白皮书:MCP中毒攻击与安全加固
  • 深入理解 Webpack 核心机制与编译流程
  • 08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习
  • .NET 8 + Angular WebSocket 高并发性能优化
  • python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型
  • 学习笔记:Conda 环境共享
  • go语言实现IP归属地查询
  • 链表面试题6之回文结构
  • HTTP3
  • MYSQL 子查询
  • 解析文件加密软件,文件加密软件是什么?2025最新分享
  • 华为FAT AP配置 真机
  • 集成学习——Bagging,Boosting
  • 计算机网络|| 路由器和交换机的配置
  • 网络服务实训室建设规划设计方案
  • LegoGPT,卡内基梅隆大学推出的乐高积木设计模型
  • sqlmap使用入门
  • Matlab 列车纵向滑模二阶自抗扰算法和PID对比
  • Spring Cache的详细使用
  • 网张实验操作-防火墙+NAT