В чём смысл подставляемой функции в С++? Я понимаю перед типом возвращаемого значения нужно писать 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-функции в разных единицах трансляции должны быть полностью идентичны, в ином случае мы получим непредсказуемый результат.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть список и есть функция addДобавляем элементы, а с функцией doubling удваиваем
Почему выводит весь массив символов(всю строку)? Если там будет,допустим, массив целочисельный,то выведет всего лишь адрес первого элемента
Для чего нам нужно еще раз объявлять статическую переменную вне класса, указывать область видимости, если я уже в классе определил ее как...
Мне нужно в мапу histogram записать значенияЯ записываю, но выдает ошибки