这次谈成员初始化。 C++存在 3 种方式初始化成员,分别为: ctor member initializer list ctor body default member initializer (in-class initializer) 关于 ctor member initializer list 和 ctor body 这2种方式,记得 Effective C++ 有条款单独讨论过,但那书太早了,只包含C++98/03,default member initializer 是C++11才有的方式。 在C++98,只有 static const int 才能够直接在类内直接初始化,它可以保证初始化是在编译期完成的。 // C++98 struct S { static const int x = 42; // OK const int… Continue Reading T230621 Member Initialization

前几天群里聊到了初始化,所以这次选择该主题。 这个主题也是一个基本内容,乃大厦之基,联系太过广泛,所以也是可深可浅。 局部值、全局值、成员值、静态值、内联值、线程值……每一个单独拿出来可能还好理解,但一组合起来就比较复杂了。有些内容,如果不懂操作系统、编译原理和汇编,还难以真正理解其来龙去脉。尤其是静态值,一个 static 本身就有十几种不同的意思,再和 inline, constexpr, constinit……一组合,可谓是复杂到了极点。 这次先来统一下变量初始化的相关术语,更多内容后面再来说。 C++ 初始化包含 default initialization, value initialization, direct initialization, copy initialization, list initialization, aggregate initialization, reference initialization 这么几种。 声明一个变量,不做任何初始化(或是类中的成员没有初始化),就会采用 default initialization。 比如 type t; new type; 这里 type 可以是 primitive types 和 class-types,primitive types 的默认初始化是保持未初始化,class-types 会调用 default ctor。 要让 primitive types 和… Continue Reading T230612 Variable initialization