考虑:
struct Person
{
int height;
int weight;
int age;
};
int main()
{
Person p { .age = 18 };
}
上面的代码在 C99 中是合法的,但在 C++11 中是不合法的。
c++11 标准委员会排除对这种方便功能的支持的理由是什么?
原文由 xmllmx 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑:
struct Person
{
int height;
int weight;
int age;
};
int main()
{
Person p { .age = 18 };
}
上面的代码在 C99 中是合法的,但在 C++11 中是不合法的。
c++11 标准委员会排除对这种方便功能的支持的理由是什么?
原文由 xmllmx 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
C++ 有构造函数。如果只初始化一个成员是有意义的,那么可以通过实现适当的构造函数在程序中表达。这是 C++ 提倡的那种抽象。
另一方面,指定的初始值设定项功能更多的是公开和使成员易于直接在客户端代码中访问。这会导致一个人 18 岁(岁?)但身高和体重为零。
换句话说,指定的初始化器支持暴露内部结构的编程风格,并且客户端可以灵活地决定他们希望如何使用该类型。
C++ 更感兴趣的是把灵活性放在类型 设计者 的一边,因此设计者可以使正确使用类型变得容易,并且难以错误使用。让设计人员控制如何初始化类型是其中的一部分:设计人员确定构造函数、类内初始化程序等。