1. ホーム
  2. c++

[解決済み] RTTIを使用せずにc++をコンパイルすると、どのような問題が発生しますか?

2022-02-19 08:10:19

質問

gccの -fno-rtti フラグを使用して、ランタイム型情報なしで C++ をコンパイルしています。

を使わないと仮定すると dynamic_cast<> または typeid() とか、後の問題につながるようなことはないのでしょうか?

解決方法は?

あなたの質問はGCCに特有のものなので、あなたが使っているバージョンのドキュメントを注意深く参照する必要があります。GCC 4.5.2のドキュメントには次のように書かれています。わたしの読みでは、dynamic_castとtypeidを避ければ、大丈夫であることを示しています。とはいえ、わたしは個人的に-fn-rttiを使った経験がありません。おそらく、あなたはなぜ-fn-rttiを使用しているのかについて詳しく説明したいと思うかもしれません。

<ブロッククオート

-fno-rtti
を持つすべてのクラスに関する情報を生成しないようにします。 仮想関数で使用されるC++の ランタイム型識別機能 ( dynamic_casttypeid ). もし、あなたが そのような部分を使用しない言語です。 を使用すると、スペースを節約することができます。 フラグを使用します。例外処理 は同じ情報を使用しますが は必要に応じて生成されます。そのため dynamic_cast 演算子を使用することができます。 を必要としないキャストに使用されます。 実行時の型情報、すなわち から void * または曖昧でないベース クラスがあります。

仮想関数とRTTIの関係については、以下のページで解説しています。 RTTIが無くても仮想メソッド . 簡単に言うと、仮想関数はRTTIがなくても問題ないはずです。