当前位置: 首页 > 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 的构造函数 */ }
};

相关文章:

  • 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 子查询
  • 高波︱忆陈昊:在中年之前离去
  • 男子发寻母视频被警方批评教育,律师:发寻亲信息是正当行为
  • 世贸组织欢迎中美经贸高层会谈取得积极成果
  • 中国科学院院士徐春明不再担任山东石油化工学院校长
  • 浙江省机电集团党委书记、董事长廉俊接受审查调查
  • 多省市已开展现房销售试点,去年全国现房销售面积占比超30%