В чём смысл подставляемой функции в С++? Я понимаю перед типом возвращаемого значения нужно писать inline? Но в чём все-таки разница между обычной и подставляемой функциями?
inline - это совет компилятору вместо вызова данной функции встраивать её тело в место вызова. Компилятор, скорее всего, не будет слушать подобного совета, и сам решит что встраивать, а что нет.
У inline-функций есть другое свойство. Функции по-умолчанию имеют внешнюю линковку (external linkage). Например, если Вы определите функцию в заголовочном файле, а затем включите этот файл в несколько единиц трансляции, то при линковке получите ошибку - множественное определение данной функции. Но если функция будет inline, то такой ошибки не возникнет, т.к. для inline-функций имеется специальное правило:
Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in that program; no diagnostic required. The definition can appear explicitly in the program, it can be found in the standard or a user-defined library, or (when appropriate) it is implicitly defined (see 12.1, 12.4 and 12.8). An inline function shall be defined in every translation unit in which it is odr-used.
...
There can be more than one definition of a class type (Clause 9), enumeration type (7.2), inline function with external linkage (7.1.2), class template (Clause 14), non-static function template (14.5.6), static data member of a class template (14.5.1.3), member function of a class template (14.5.1.1), or template specialization for which some template parameters are not specified (14.7, 14.5.5) in a program provided that each definition appears in a different translation unit, and provided the definitions satisfy the following requirements.
т.е. для inline-функций разрешается множественное определение в разных единицах трансляции, и если вызовы не будут встроены то вызовы сведутся к вызову одной функции (что делает безболезненным удаление лишних определений), но определения inline-функции в разных единицах трансляции должны быть полностью идентичны, в ином случае мы получим непредсказуемый результат.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости