Готовый перевод Google C++ Style Guide / Google C++ Style Guide: Inline Functions

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «идёт перевод»

Встраиваемые функции

Определяйте как встраиваемые только небольшие функции, не более 10 строк.

Определение:

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

Плюсы:

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

Минусы:

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

Решение:

Хорошим правилом будет отказ от встраивания функции, если она занимает более 10 строк. Следует быть аккуратнее с деструкторами, которые зачастую длиннее., чем кажутся, из-за неявных вызовов деструкторов полей и базовых классов.

Другое полезное правило: обычно нецелесообразно встраивать функции с циклами или операторами выбора, за исключением случаев, когда оператор цикла или оператор выбора предполагается выполняющимся крайне редко.

Важно знать, что функции не всегда встраиваются, даже если они так объявлены; например, виртуальные и рекурсивные функции обычно не встраиваются. Обычно, рекурсивные функции не должны быть встраиваемые. Главной причиной определения виртуальной функции, как встраиваемой, является её определение в классе, либо для удобства, либо для документирования её поведения, например, для аксессоров и мутаторов.

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод

Переведено на Нотабеноиде
http://notabenoid.org/book/32830/114583

Переводчики: Dynorth, mayorovp

Настройки

Готово:

100.00% КП = 1.2