Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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