Google C++ Style Guide / Google C++ Style Guide: Inline Functions
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Встраиваемые функции Dynorth 19.11.12 в 19:51 |
|
|
Определяйте функции, как встраиваемые, только когда они небольшие, не больше примерно 10 строк. Dynorth 19.11.12 в 19:51 Определяйте как встраиваемые только небольшие функции, не более 10 строк. mayorovp 20.11.12 в 05:37 |
||
|
Определение: Dynorth 19.11.12 в 19:51 |
||
|
Вы можете объявлять функции способом, позволяющему компилятору раскрыть их в месте вызова, вместо вызова с применением обычного механизма вызова функций. Dynorth 19.11.12 в 19:52 |
||
|
Плюсы: Dynorth 19.11.12 в 19:52 |
||
|
Встраивание функции может сгенерировать более эффективный объектный код, если встраиваемая функция небольшая. Вы можете спокойно встраивать аксессоры, мутаторы, и другие короткие, критичные к производительности функции. Dynorth 19.11.12 в 19:55 |
||
|
Минусы: Dynorth 19.11.12 в 19:55 |
||
|
Чрезмерное использование встраивания, на самом деле, может замедлить программу. В зависимости от размера функции, её встраивание может привести к уменьшению или увеличению размера кода. Встраивание очень маленькой функции-аксессора обычно уменьшит код, тогда как встраивание очень большой функции может значительно увеличить размер кода. Небольшой код на современных процессорах обычно работает быстрее благодаря лучшему использованию кэша инструкций. Dynorth 19.11.12 в 19:57 |
||
|
Решение: Dynorth 19.11.12 в 19:57 |
||
|
Хорошим общим правилом будет не встраивание функции, если она занимает больше 10 строк. Аккуратнее с деструкторами, которые обычно длиннее, чем они кажутся из-за неявных вызовов членов и деструкторов базовых классов! Dynorth 19.11.12 в 19:59 Хорошим правилом будет отказ от встраивания функции, если она занимает более 10 строк. Следует быть аккуратнее с деструкторами, которые зачастую длиннее., чем кажутся, из-за неявных вызовов деструкторов полей и базовых классов. mayorovp 20.11.12 в 05:40 |
||
|
Другое полезное правило: обычно нецелесообразно встраивать функции с циклами или switch-операторами (если только в большинстве случаев цикл или switch-оператор не будет выполнен). Dynorth 19.11.12 в 20:01 Другое полезное правило: обычно нецелесообразно встраивать функции с циклами или операторами выбора, за исключением случаев, когда оператор цикла или оператор выбора предполагается выполняющимся крайне редко. mayorovp 20.11.12 в 05:42 |
||
|
Важно знать, что функции не всегда встраиваются, даже если они так объявлены; например, виртуальные и рекурсивные функции обычно не встраиваются. Обычно, рекурсивные функции не должны быть встраиваемые. Главной причиной определения виртуальной функции, как встраиваемой, является её определение в классе, либо для удобства, либо для документирования её поведения, например, для аксессоров и мутаторов. Dynorth 19.11.12 в 20:03 |
