1. ホーム
  2. c++

[解決済み] 純粋仮想関数はなぜ0で初期化されるのですか?

2022-04-25 01:07:05

質問

純粋仮想関数は常に次のように宣言します。

virtual void fun () = 0 ;

すなわち、常に0が代入される。

私が理解したのは、これはこの関数の vtable エントリを NULL に初期化するためで、ここに他の値があるとコンパイル時にエラーになるということです。この理解は正しいのでしょうか、それとも違うのでしょうか?

どのように解決するのですか?

理由 =0 が使われているのは、Bjarne Stroustrup がこの機能を実装していた当時、C++ コミュニティに "pure" のような別のキーワードを通せないと考えたからです。これについては、彼の著書に書かれています。 C++の設計と進化 13.2.3節)。

<ブロッククオート

不思議な =0 構文が選ばれました. というのも、その当時は 新しいキーワードを受け入れてもらう。

また、vtableのエントリをNULLに設定する必要はなく、そうすることは純粋な仮想関数を実装する最良の方法ではないことを明言しています。