C 11 类内初始化:解决过去的限制
在 C 11 之前,类内初始化仅限于积分的静态 const 成员或枚举类型。此限制源于需要避免复杂的链接器规则,确保每个对象都有唯一的定义。
但是,C 11 通过允许非静态和非常量成员的类内初始化引入了重大更改(§ 12.6.2/8)。这种放松是可能的,因为编译器的改进,编译器现在承担了整理任何潜在的多个定义的责任,允许更复杂的类声明。
对于非静态数据成员,大括号或等于 -初始化器可用于在对象构造期间进行初始化。除非显式指定,否则不会初始化变体成员,而在未提供初始化程序时执行默认初始化。
现在,当使用 constexpr 说明符声明非常量静态成员时,也可以进行类内初始化(第 9.4.2 节).
这些更改消除了对类外成员初始值设定项的需要,从而提高了代码的简单性和效率。但是,它们还引入了新规则来处理不同类构造函数中潜在的重复初始化程序。例如,如果一个成员变量有一个类内初始化器,并且也在构造函数内初始化,那么在使用该构造函数时,类内初始化器将被忽略。
总而言之,虽然底层实现复杂性已经发生了变化从链接器到编译器,C 11的类内初始化大大增强了类定义和成员初始化能力,提高了代码可读性和灵活性。
以上是C 11 如何增强类内初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!