在最近的一次开发者会议上,简要讨论了 Swift中的继承struct(或者更准确地说是 Swift 中缺乏继承)的主题。struct我假设 Swift 不支持struct继承的原因是:
structs 是值类型- 值类型在堆栈帧之间复制
- 继承意味着 a 的大小
struct可能会有所不同(例如,如果Lorry继承自Vehicle并Lorry添加.weightCapacitythenLorry将需要比 更多的空间Vehicle) - 具有大小在编译时未知的值类型参数会使调用者的堆栈帧构造和访问被调用者的数据复杂化
我认为正是由于这些复杂性,可能会给每个涉及 a 的函数调用添加额外的操作,struct从而降低性能,Swift 不允许struct继承。这个推理正确吗?
但后来我想到了 C++。C++ 确实允许struct继承,并且 C++ 非常注重性能。这让我觉得我对 Swift 不允许struct继承的推理是错误的。C++ 如何在struct不影响性能的情况下实现继承?