Обновить

Комментарии 3

Правда, есть совсем немногочисленные исключения (я нашёл только два следующих; если знаете ещё – смело сообщите их в комментариях)

Гарантированный в c++17 Unnamed return value optimization я думаю в этом списке должен быть. Компилируем старый код с -std=c++17 и вдруг начинаем звать меньше конструкторов копирования. Вообще там думаю примеров не 2 и не 3 а гораздо больше, тк даже переход между мажорными версиями компилятора, не то что переход на др. стандарт при компиляции, вносит кучу мелких изменений в поведение.

если определяется пользовательский копирующий конструктор, то допустимо ли класть его в регистр

не разрешено передавать через регистры определённые пользователем копирующие конструкторы

Наверное через регистры передаётся не ctor, а его параметры? Перефразируйте

В 32-битных программах действовало множество соглашений о вызовах, в частности, cdeclstdcallfastcallthiscall и т.д. В то время программы сильно страдали от проблем с совместимостью. 

Здесь проблема была не в 32-бирных системах. А в том что тогда было много компиляторов, и каждый производитель компилятора придумывал своё соглашение вызова функций. Все таки вызов функций это стандарт компилятора а не операционной системы.

И что вы имеете ввиду под страданием от проблем с совместимостью. Когда треть программы откомпилировали в С компиляторе треть в Паскале и ещё треть в Бэйсике. И эти части не могут работать вместе поскольку у их компиляторов разные соглашения вызова функций!

Но ведь всегда можно было в прототипе функции указать тип вызова. Иначе нельзя было бы вызывать WinAPI из си или паскаля.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации