2

特定の条件下で、使用するメソッドの正確な実装をコンパイラが判断できないという話をよく耳にします。キツネの例では、子クラスでオーバーライドされたメソッド foo() を持つ親クラスの場合、コンパイラは実行時まで呼び出す foo() の実装を決定しないというシナリオを想像できます (人々が言うように)。したがって、動的ディスパッチ、vtables などの概念があります。

私の質問は、コンパイラが呼び出す正確な実装を決定できないのはなぜですか? 私は最近それについて考えるのをやめました、そして私はそれを正当化するために一生懸命努力してきました. おそらく、私が見逃していることが本当に明らかな何かがあるのでしょう (答えを聞いたとき、私はおそらく自分自身を蹴るでしょう)。それは単に外部環境によるものですか?もしそうなら、それはどのように正確に行われますか?

これは言語に依存する制限ですか、それとももっと基本的なものがありますか?

4

2 に答える 2

0

コンパイラは、実際に実行されるマシン コードを準備することを除けば、ランタイムとは何の関係もありません。

オブジェクトが動的に作成され、ポリモーフィック プロパティを持ち、関数がスーパークラス タイプのパラメーターを取得する場合、そのタイプは、渡されるまで PROGRAM によって認識されません。

于 2014-12-10T22:44:12.380 に答える