Как узнать, какие функции генерирует компилятор? - PullRequest
11 голосов
/ 06 января 2020

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

Is Есть ли способ перечислить сгенерированные компилятором функции для определенного c класса?

Меня в первую очередь интересуют Visual Studio 2019 и Xcode, но универсальное решение c было бы еще более желанным .

Ответы [ 3 ]

11 голосов
/ 06 января 2020

Правила сложны. Я украду из другого ответа , который цитирует таблицу из презентации Говарда Хиннанта .

enter image description here

Мораль здесь хорошо, что не полагается на неявные объявления компилятора и явное объявление каждого специального члена (как дефолтного или удаленного, в зависимости от ваших потребностей)

7 голосов
/ 06 января 2020

"Есть ли способ перечислить сгенерированные компилятором функции для определенного c класса?"

Конечно, есть. В Linux (и других системах Unix) вы можете использовать nm, readelf и objdump в сгенерированных объектных файлах / библиотеках / исполняемых файлах для их разборки и проверки любых экспортированных символов ( и многое другое).

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

1 голос
/ 09 января 2020

В настоящее время это только частичный ответ.

Visual Studio 2019

Конструкторы

При определении объекта класса функция IntelliSense в Visual Studio отображает доступные конструкторы, оба компилятора и ваши собственные:

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...