Ваш коллега должен проверить значение встраивания в C ++.
Есть два значения этого слова, и важно их разделить:
В соответствии со стандартом C ++ функция имеет значение inline
, если она помечена ключевым словом inline
или определена внутри определения класса.
Единственный требуемый эффект этого - отключение правила «Одно определение», то есть придание законности определения определения в нескольких единицах перевода без появления ошибки компоновщика. По сути, это позволяет поместить полное определение в заголовочный файл
Затем идет "inline" оптимизация , которая состоит из взятия тела функции и вставки его вместо вызова функции.
Эти значения почти полностью ортогональны. Функция может быть встроена компилятором независимо от того, отметил ли вы, программист, что это inline
. (Хотя компилятору труднее и реже иметь возможность встроить, если функция вызывается в другом модуле перевода, чем тот, в котором она была определена) Функция, помеченная inline
в C ++, может или не может быть встроена компилятор. Компилятор пытается оценить возможную выгоду от этого, основываясь на размере кода, частоте вызова функции, количестве сайтов вызовов и такой эвристике. В результате компилятор довольно хорошо определяет, когда стоит встраивать оптимизация , и вам лучше всего оставить его в покое.
Вы должны просто пометить функции как встроенные, когда 1) это удобно для вас, и 2) вы хотите, чтобы компилятор имел опцию для применения оптимизации встраивания.
Но вы не заставляете компилятор ничего встроить. Вы просто упорядочиваете код так, чтобы он мог, если захочет, встроить вызов функции.