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