Почему g++ генерирует два конструктора с разными искажениями имен? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Почему g++ генерирует два конструктора с разными искажениями имен? [дубликат]

Сообщение Anonymous »

Следующий тестовый пример:

Код: Выделить всё

// 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< /p>

Код: Выделить всё

 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()
Почему g++ генерирует два конструктора с разными искажениями имен(

Код: Выделить всё

_ZN1XC1Ev
и _ZN1XC2Ev)?

Подробнее здесь: https://stackoverflow.com/questions/185 ... -manglings

Вернуться в «C++»