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