Я прочитал эту статью от Д. Калева этим утром о новой функции c ++ 11 "функции по умолчанию и удаленные функции", и не могу понять часть о производительности, а именно:
ручное определение специальной функции-члена (даже если она тривиальная) обычно менее эффективно, чем неявно определенная.
Погуглив, чтобы найти ответ, я нашел еще одну статью того же автора:
Синтезированный конструктор и конструктор копирования позволяют реализации создавать код, более эффективный, чем написанный пользователем код, поскольку он может применять оптимизации, которые не всегда возможны в противном случае.
Объяснения нет, но я время от времени читаю подобные заявления.
Но как это так:
class C { C() = default; };
может быть более эффективным, чем
class C { C(){} };
? Я думаю, что компилятор был бы достаточно умен, чтобы обнаружить такую ситуацию и оптимизировать ее. Другими словами, как компилятору легче оптимизировать, когда он видит =default
вместо {}
(функция void body)?
Редактировать: вопрос был отредактирован для добавления тега "c ++ 11", но этот вопрос остается в контексте c ++ 03: просто замените class C {C()=default;};
на class C {};
, так что на самом деле не относится к конкретному c ++ 11 вопрос.