C 11 的类内初始化:放宽对非静态和非常量成员的限制
C 11 之前,类内初始化仅限于 static const 整型或枚举类型成员。此限制背后的原因是需要跨多个翻译单元维护对象的唯一定义,同时避免复杂的链接器规则。
但是,C 11 放宽了这些限制,允许非静态成员的类内初始化(§ 12.6.2/8)。这包括带有大括号或等于初始化程序的非静态数据成员和非抽象类的非虚拟基类。
那么,是什么改变了这一切?虽然没有对链接器进行重大修改,但编译器在处理额外职责方面变得更加复杂。
与以前版本的 C 对多个定义强制执行严格的规则不同,C 11 的编译器现在可以处理多个定义一堂课。编译器承担此任务,而不是由链接器解决定义冲突。
这种责任变化为程序员带来了更多复杂性,他们现在必须考虑单个成员的多个成员初始化之间的潜在冲突。例如,一个类同时具有成员初始值设定项和对同一成员进行特定初始化的构造函数,需要仔细考虑以确定将使用哪个初始化。
尽管复杂性增加,但类内初始化的好处胜过挑战。它允许更简洁和更具表现力的代码,减少样板代码并使代码更易于阅读和理解。
以上是C 11 如何允许非静态和非常量成员的类内初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!