最近の開発者ミーティングで、Swift のstruct継承 (より正確にはstructSwift の継承の欠如) のトピックが簡単に議論されました。structSwift が継承をサポートしていない理由は次のとおりだと思います。
structs は値型です- 値の型はスタック フレーム間でコピーされます
- 継承は、 a のサイズ
structが異なる可能性があることを意味します (たとえば、Lorry継承元VehicleとLorry追加の.weightCapacity場合Lorry、 よりも多くのスペースが必要になりますVehicle) - コンパイル時に不明なサイズの値型パラメーターを持つと、呼び出し元のスタック フレームの構築と呼び出し先のデータへのアクセスが複雑になります。
Swift が継承structを許可しないのは、これらの複雑さが原因であり、おそらく a を含むすべての関数呼び出しに余分な操作が追加され、パフォーマンスが低下するためだと思います。structこの推論は正しいですか?
しかし、私はC++について考えました。C++ は継承を許可structしており、C++ は非常にパフォーマンス重視です。structこれは、Swift が継承を許可しないという私の推論が間違っていると思わせます。C++ はどのようにしてstructパフォーマンスに悪影響を与えずに継承を達成しましたか?