5

テストケースは次のとおりです。

// test.cpp
class X {
public:
    X();
};

X::X() { }

void foo() {
  X x;
}

それをコンパイルし、次のようにオブジェクト ファイル内のシンボルを読み取ります。

[root@localhost tmp]# g++ -c test.cpp

[root@localhost tmp]# readelf -s -W test.o

シンボル テーブル '.symtab' には 12 のエントリが含まれています。

Num: 値 サイズ タイプ Bind Vis Ndx Name

 0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
 1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS test.cpp
 2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 
 3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3 
 4: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 
 5: 0000000000000000     0 SECTION LOCAL  DEFAULT    6 
 6: 0000000000000000     0 SECTION LOCAL  DEFAULT    7 
 7: 0000000000000000     0 SECTION LOCAL  DEFAULT    5 
 8: 0000000000000000    10 FUNC    GLOBAL DEFAULT    1 _ZN1XC2Ev   => X::X()
 9: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND __gxx_personality_v0
10: 0000000000000000    10 FUNC    GLOBAL DEFAULT    1 _ZN1XC1Ev   => X::X()
11: 000000000000000a    22 FUNC    GLOBAL DEFAULT    1 _Z3foov

[root@localhost tmp]# c++filt _ZN1XC1Ev

X::X()

[root@localhost tmp]# c++filt _ZN1XC2Ev

X::X()

_ZN1XC1Evg++ が異なる名前の manglings(と_ZN1XC2Ev)を持つ 2 つのコンストラクターを生成するのはなぜですか?

4

1 に答える 1