Технически ключевое слово inline
означает, что определение разрешено в нескольких единицах перевода. То есть, если у вас есть встроенная функция, определенная в файле заголовка, и этот заголовок включается в несколько исходных файлов, тогда это нормально. Для не-встроенной функции без шаблона это было бы незаконным.
Но компиляторы могут и могут воспользоваться возможностью видеть код вызываемой функции. Это происходит не только для встроенных функций, но и для любых других функций, код которых может быть видимым. Многие компиляторы стараются сделать хорошее предположение о том, следует ли встраивать код. Наличие встроенного кода может сделать программу большей или меньшей, быстрее или медленнее. Если компилятор может определить, что код, вероятно, будет быстрее и меньше, когда код будет встроен, тогда он сделает это. В противном случае он должен учитывать компромисс.
Многие современные компиляторы могут оптимизировать время соединения, где код, который не был встроен в начало, может быть встроен во время фазы ссылки, с некоторой стоимостью во времени связи. Могут быть определенные возможности оптимизации, которые теряются при задержке до момента соединения.
По моему собственному опыту, я обнаружил, что создание небольших функций является встроенным, как правило, всегда является победой как для размера, так и для скорости. Для больших функций я часто вижу, что программы делают быстрее, но больше, но я также видел, что они редко делают программы медленнее и больше. Если производительность определенной функции важна, вам нужно будет сделать измерения, чтобы помочь сделать выбор в строке или нет.
Когда вы включаете заголовочный файл, препроцессор буквально копирует и вставляет код там, где вы его включили. – Andrew
Я предлагаю вам взглянуть сюда: http://programmers.stackexchange.com/questions/180904/are-header-files-actually-good –
'inline' в основном не означает« сделать этот код встроенным »в C++ , это больше связано с тем, как разрешать конфликты имени времени ссылки. «Ввод кода inline» имеет мало смысла в контексте стандарта C++. – Yakk