gpt4 book ai didi

C++和Swift : How are structs handled in C++ stack frames? struct继承的复杂性为什么Swift不支持struct继承?

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:43 25 4
gpt4 key购买 nike

在最近的一次开发者聚会上,简要讨论了 Swift 中的 struct 继承(或者更准确地说,Swift 中缺少 struct 继承)的主题。我假设 Swift 不支持 struct 继承的原因是因为:

  • struct是值类型
  • 值类型在堆栈帧之间复制
  • 继承意味着 struct 的大小可以变化(例如,如果 Lorry 继承自 VehicleLorry 添加 .weightCapacity 然后 Lorry 将比 Vehicle 需要更多的空间)
  • 具有在编译时未知大小的值类型参数会使调用者的栈帧构造和被调用者访问数据变得复杂

我假设正是由于这些复杂性,这可能会为涉及 struct 的每个函数调用添加额外的操作,从而降低性能,Swift 不允许 struct继承。这个推理正确吗?

但后来我想到了 C++。 C++ 确实允许 struct 继承,并且 C++ 非常注重性能。这让我觉得我对 Swift 不允许 struct 继承的推理是错误的。 C++ 如何在不对性能产生负面影响的情况下实现 struct 继承?

最佳答案

How does C++ achieved struct inheritance without negatively impacting performance?

在 C++ 中,编译器总是 知道struct 的大小。但是当按值复制基类时,对象会被“切片”:只复制基类的成员,新对象与原始对象的派生类没有任何关系。

因此,如果函数想要对 Vehicle 执行某些操作而不切断其额外标识,则它必须使用指向 Vehicle 的指针或引用作为函数参数类型,或者返回类型。但那时您不再有“在堆栈帧之间复制的值类型”。

关于C++和Swift : How are structs handled in C++ stack frames? struct继承的复杂性为什么Swift不支持struct继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com