ARM C ++ ABI: возвращаемые значения конструктора / деструктора

Я читал исходный код Clang и обнаружил кое-что интересное в ARM C ++ ABI, для которого я не могу понять оправдание. Из онлайн-версииARM ABI документация:

Для этого ABI требуются конструкторы C1 и C2 для возвратаэто (вместо того, чтобы быть пустыми функциями), так что конструктор C3 может вызывать конструктор C1, а конструктор C1 может вызывать C2.

(и аналогично для не виртуальных деструкторов)

Я не уверен чтоC1, C2, а такжеC3 ссылка здесь ... этот раздел предназначен для модификации §3.1.5 от общего (то есть, Itanium) ABI, но этот раздел (по крайней мере, вэто онлайн версия) просто заявляет:

Конструкторы возвращаютнедействительным Результаты.

Во всяком случае, я действительно не могу понять, какова цель этого: как сделать возвращение конструктораэто разрешить оптимизацию вызовов и при каких обстоятельствах?

Насколько я могу судить, единственный раз, когда конструктор мог вызвать другого с тем жеthis возвращаемое значение будет иметь место для производного класса с одним базовым классом, тривиальным телом конструктора, без членов с нетривиальными конструкторами и без указателя виртуальной таблицы. На самом деле, кажется, что на самом деле было бы проще, а не сложнее, оптимизировать с помощью хвостового вызова сvoid возврат, потому что тогда ограничение одного базового класса может быть устранено (в случае нескольких базовых классов,this указатель, возвращаемый из последнего вызванного конструктора, не будетthis указатель производного объекта).

Что мне здесь не хватает? Есть ли что-то в соглашении о вызовах ARM, которое делаетthis вернуть надо?

Ответы на вопрос(1)

Ваш ответ на вопрос