インタビュアーは私にこの質問をしましたが、それに対する私の答えが十分であったかどうかはわかりませんでした。誰かアイデアはありますか?
質問する
127 次
2 に答える
0
これをよく理解しているとは言えませんが、IanLanceTaylorによるこのブログエントリには答えがあるようです。そこからの引用:
C ++を使用する場合、いくつかの特別な課題があります。クラスに新しい仮想メソッドを追加すると、そのクラスを使用するすべての関数のABIが変更される可能性があります。このような状況で下位互換性のあるバージョンのクラスを提供することは非常に厄介です。仮想テーブルに使用する名前とバージョン、または古いバージョンのRTTI情報を指定する自然な方法はありません。
もちろん、シンボルを削除してはいけません。
さらにコンテキストについては、エントリをお読みください。(ABI =アプリケーションバイナリインターフェイス)
于 2012-11-22T01:53:04.420 に答える
0
私の頭に浮かんだ最初の考えは、名前のマングリングでした。C ++では、Cではなく、同じ名前でパラメーターが異なる2つのメソッドを使用できます。コンパイラーは2つのメソッドを区別する必要があるため、名前を内部で変更(マングル)します。
C ++コンパイラがC以外でそれを行わなければならないもう1つのことは、クラスの継承を処理することです。抽象クラス、オーバーライドされたメソッド、および仮想メソッドがあります。それを整理するには、もう少し処理が必要です。
于 2012-11-22T01:53:52.460 に答える