Если функция мала (вероятность того, что вы ее часто изменяете, мала), и если функцию можно поместить в заголовок без включения множества других заголовков (потому что ваша функция зависит от них), она вполне допустима для Сделай так. Если вы объявляете их внешне встроенными, то компилятор должен дать ему один и тот же адрес для каждой единицы компиляции:
headera.h
inline string method() {
return something;
}
Функции-члены являются неявными встроенными, если они определены внутри своего класса. То же самое верно для них, правда: если они могут быть помещены в заголовок без хлопот, вы действительно можете это сделать.
Поскольку код функции помещается в заголовок и отображается, компилятор может выполнять встроенные вызовы к ним, то есть размещать код функции непосредственно на сайте вызова (не так много, потому что перед ним встроен код). , но больше, потому что компилятор решает таким образом, хотя. Помещение только inline - подсказка компилятору относительно этого). Это может привести к повышению производительности, поскольку компилятор теперь видит, где аргументы соответствуют переменным, локальным для функции, и где аргументы не совпадают друг с другом - и, наконец, что не менее важно, распределение фреймов функции больше не требуется.
Насколько я понимаю, когда компиляция завершена, компилятор раскроет заголовочный файл и поместит его туда, где он включен. Это правильно?
Да, это правильно. Функция будет определена в каждом месте, где вы включаете ее заголовок. Компилятор позаботится о том, чтобы поместить только один его экземпляр в результирующую программу, исключив остальные.