1

g++ コンパイラーを使用して、Linux で Intel コード・カバレッジ・ツールを使用しています。特定のクラスについて、カバレッジ ツールは、ソース コードに実際に存在する関数よりも 2/3 余分な関数を示します。

これらの追加機能は何ですか? それらはコンパイラによって生成された関数ですか?

コード カバレッジからヘッダー ファイルを除外しています。私のクラスは空の ctor と dtor でシンプルです。

次の関数はコンパイラによって生成されると思います。

  1. コンストラクターのコピー
  2. 代入演算子
  3. マクロ(私の場合ではありません)
  4. シグナル スロット接続メカニズム (たとえば、Qt moc コンパイラではこれらが生成されます)
4

1 に答える 1

1

このブログ エントリ(GDB を使用したデバッグに関するもの) では、「余分な」コンストラクタが表示される理由を説明しています。

gcc は、コンストラクターに対して 2 つの異なる関数本体を生成します。1 つは、すべてのベースを含むオブジェクト全体を構築する通常のものです。もう 1 つは、仮想基本クラスを除くすべてを構築します。たまたま、仮想ベースをまったく持たないクラスに対しても、gcc は両方のコンストラクターを発行します。

于 2009-05-13T15:39:42.217 に答える