2014-12-08 4 views
1

В основном я хочу видеть функции, генерируемые компилятором (конструктор по умолчанию, конструктор копирования, оператор присваивания, назначение переноса, деструктор).
Просто хочу посмотреть, какие функции компилятора созданы для меня.Как я могу увидеть все функции класса?

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

Есть ли лучший способ увидеть, какие функции связаны с классом?

+1

Я надеюсь, что подобная тема поможет вам приблизиться, [** link **] (http://stackoverflow.com/questions/3526546/get-the-list-of-methods-of-a-class) – saikumarm

ответ

2

Там проблема с вашей идеей:

Компилятор неявно объявить специальные функции, когда допускается.
Но это будет только неявно определять их, если они используются ODR.

Кроме того, это использование могло быть встроено, поэтому может не быть символа для поиска.

Таким образом, единственный способ безотказной проверки того, какие функции компилятор будет генерировать по требованию, пытается их использовать.
Хотя просто знание правил и проверка вручную должны быть достаточными, они достаточно легки.

+0

Спасибо. Кажется, на самом деле это не очень хороший способ проверить это. Может быть, глядя на разборку? Посмотрите, есть ли какой-нибудь вызов JUMP? – madu

+1

@madu: Дело в том, что эти неявные специальные функции могут не существовать, даже если компилятор может их генерировать, потому что они никогда не были нужны, или потому, что каждое использование было встроено, так что найти нечего. – Deduplicator

+0

Спасибо. Я понимаю, что есть разные случаи. То, что я хотел видеть, как минимум, состояло в том, чтобы иметь пустой класс, в этом случае не будет генерируемых функций. Но если я добавлю виртуальную функцию, то компилятор поставит конструктор для создания vtable (например). Я хотел увидеть этот случай, когда компилятор сгенерировал const. для меня. Но, как вы сказали, это может быть встроено. – madu