Как я могу увидеть все функции класса?

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

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

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


person madu    schedule 08.12.2014    source источник
comment
Я надеюсь, что этот похожий поток может помочь вам приблизиться, link< /б>   -  person saikumarm    schedule 08.12.2014


Ответы (1)


Есть проблема с вашей идеей:

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

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

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

person Deduplicator    schedule 08.12.2014
comment
Спасибо. Кажется, действительно нет хорошего способа проверить это. Может смотреть на разборке? Посмотрите, есть ли где-нибудь вызов JUMP? - person madu; 08.12.2014
comment
@madu: Дело в том, что эти неявные специальные функции могут не существовать, даже если компилятор может их сгенерировать, либо потому, что они никогда не были нужны, либо потому, что каждое использование было встроено, поэтому искать нечего. - person Deduplicator; 08.12.2014
comment
Спасибо. Я понимаю, что бывают разные случаи. То, что я хотел видеть, это как минимум пустой класс, в этом случае не будет сгенерированных функций. Но если я добавлю виртуальную функцию, то компилятор поставит конструктор для создания виртуальной таблицы (например). Я хотел увидеть этот случай, когда компилятор сгенерировал константу. для меня. Но, как вы сказали, это может быть встроено. - person madu; 08.12.2014