2016-10-11 14 views
3

Мы столкнулись с чем-то, о котором я не нашел никакой документации. Кажется, что есть много членов класса и т. Д., Которые с течением времени получают разные искаженные имена. Таким образом, в один день, компиляция дает это, например,clang измененные имена меняются со временем

_ZThn1128_N9TESTCLASS14ContentChangedEv

Затем после некоторого дня развития, он получает что-то другой префикс, как

_ZThn1140_N9TESTCLASS14ContentChangedEv

Есть ли у вас какие-либо идеи , что здесь представляет собой разнообразный префикс? Я подумал, что, возможно, это как-то связано с номером строки, но нет. Во-вторых, как мы могли обеспечить, чтобы это не менялось со временем? Префикс, конечно же, является лишь дополнительным, потому что демаршированное имя остается прежним, если я, например, меняю это число.

Заранее спасибо.

+0

Если вы полагаетесь на эти имена, вы делаете что-то неправильно. – xaxxon

+0

Я не просил такого мнения, спасибо. Даже valgrind полагается на искаженные имена, например, в случае файлов supp, поэтому вы можете поделиться своими мыслями и с ними. И, конечно, если я получаю несколько столов для какой-то другой цели, я не мог бы отличать их автоматически, просто с трюками. – newhouse

+0

Тогда почему это имеет значение, если они меняются? – xaxxon

ответ

2

_ZThn1128_N9TESTCLASS14ContentChangedEv demangled до non-virtual thunk to TESTCLASS::ContentChanged(). This Q&A предполагает, что изменение имени искаженного символа может быть обусловлено изменением sizeof одного из базовых классов TESTCLASS.

+0

Спасибо, это должен быть ответ тогда – newhouse