考虑:
struct Person
{
int height;
int weight;
int age;
};
int main()
{
Person p { .age = 18 };
}
上述代码在C99中是合法的,但在C 11中不合法.
c++11标准委员会解除对这种方便功能的支持的理由是什么?
解决方法:
C有构造函数.如果只初始化一个成员是有意义的,那么可以通过实现适当的构造函数在程序中表达.这是C推广的抽象.
另一方面,指定的初始化器功能更多地是关于公开并使成员易于直接在客户端代码中访问.这会导致像18岁(年?)但身高和体重为零的人.
换句话说,指定的初始化程序支持一种内部暴露的编程风格,并且客户端可以灵活地决定他们想要如何使用该类型.
C更感兴趣的是将灵活性放在类型设计器的一侧,因此设计人员可以很容易地正确使用类型并且难以正确使用.让设计者控制如何初始化类型是其中的一部分:设计者确定构造函数,类内初始化器等.