Готовый перевод Google C++ Style Guide / Google C++ Style Guide: Inline Functions
Встраиваемые функции
Определяйте как встраиваемые только небольшие функции, не более 10 строк.
Определение:
Вы можете объявлять функции способом, позволяющему компилятору раскрыть их в месте вызова, вместо вызова с применением обычного механизма вызова функций.
Плюсы:
Встраивание функции может сгенерировать более эффективный объектный код, если встраиваемая функция небольшая. Вы можете спокойно встраивать аксессоры, мутаторы, и другие короткие, критичные к производительности функции.
Минусы:
Чрезмерное использование встраивания, на самом деле, может замедлить программу. В зависимости от размера функции, её встраивание может привести к уменьшению или увеличению размера кода. Встраивание очень маленькой функции-аксессора обычно уменьшит код, тогда как встраивание очень большой функции может значительно увеличить размер кода. Небольшой код на современных процессорах обычно работает быстрее благодаря лучшему использованию кэша инструкций.
Решение:
Хорошим правилом будет отказ от встраивания функции, если она занимает более 10 строк. Следует быть аккуратнее с деструкторами, которые зачастую длиннее., чем кажутся, из-за неявных вызовов деструкторов полей и базовых классов.
Другое полезное правило: обычно нецелесообразно встраивать функции с циклами или операторами выбора, за исключением случаев, когда оператор цикла или оператор выбора предполагается выполняющимся крайне редко.
Важно знать, что функции не всегда встраиваются, даже если они так объявлены; например, виртуальные и рекурсивные функции обычно не встраиваются. Обычно, рекурсивные функции не должны быть встраиваемые. Главной причиной определения виртуальной функции, как встраиваемой, является её определение в классе, либо для удобства, либо для документирования её поведения, например, для аксессоров и мутаторов.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/32830/114583
Переводчики: Dynorth, mayorovp
Настройки
Готово:
