初始化列表
字不如图,图不如视频 https://www.imooc.com/video/8135
初始化列表可以让类的属性带上默认值。
初始化列表只能用于构造函数,即类在实例化时会调用自己的构造函数,初始化列表先于构造函数执行,这样对象在创建的时候就有了带默认值的属性。
格式如下图红色部分:赋值必须在()内。
初始化列表与在构造函数的{ }里赋值是不同的,
class Base { public: Base(const string& s) : s_(s) {} /* Base(const string& s) { s_ = s; } */ private: string s_; };
编译器大概会把以上代码扩张成
Base(const string& s) { s_.string::string(s); } /* Base(const string& s) { s_.string::string(); string tmp = string(s); // create temporary object s_.string::operator=(tmp); tmp.string::~string(); } */
所以 被注视掉的写法,多了一次构造函数和析构函数的开销。因此初始化列表的优点:节省开销,更高效。
static类成员永远也不会在类的构造函数初始化。静态成员在程序运行的过程中只被初始化一次,所以每当类的对象创建时都去“初始化”它们没有任何意义。至少这会影响效率:既然是“初始化”,那为什么要去做多次?
【参考】
C++面向对象,类的无参、带参构造函数、拷贝构造函数以及深拷贝和浅拷贝
分类:
C++基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界