Я искал в Интернете несколько тем, связанных с встроенными функциями, но никто из них не сомневался.
До сих пор я знаю, что встроенная функция работает так же, как метод или блок, но недавно увидела следующий ответ:
Объявляя функцию inline, вы говорите компилятору, чтобы заменить полный код этой функции непосредственно на место, откуда он был вызван. Это довольно продвинутая функция, которая требует понимания программирования нижнего уровня.
Таким образом, это означает, что в нормальных функциях: я был в точке А и хотел пойти в точку Б, чтобы я выбрался из А и пошел в В, верно?
Имеют встроенные функции: я был в точке A и хотел бы перейти в точку B, чтобы точка B доходила до точки A?
Что я сказал выше, правильно?
В идеале, с ключевым словом inline
, компилятор вставляет содержимое встроенной функции в том месте, где вызывается функция.
Данный:
void Print(void)
{
cout << "Hello World!\n";
}
int main(void)
{
Print();
return 0;
}
Компилятор будет генерировать инструкцию сборки для вызова функции Print
внутри main
функции.
При объявлении функции Print
inline компилятор генерирует концептуальную функцию main()
ниже:
int main(void)
{
// Substitute content of Print function because it declared as inline
cout << "Hello World!\n";
return 0;
}
Помните, что ключевое слово inline
является предложением для компилятора, и компилятор может его игнорировать. Компилятор может уже выполнять небольшие функции без использования inline
ключевого слова.
Давным-давно ключевое слово inline
использовалось, чтобы заставить компиляторы вставить код, в котором была вызвана функция. Этот метод использовался для устранения служебных вызовов функций. Это было в то время, когда компиляторы были менее умны в оптимизации.
Цитата должна читать "заменить вызов"..."поместить полный код". Идеал за встроенной функцией похож на макрос; в каждом месте исходного кода, вызывающего встроенную функцию, вместо вызова встроенной функции, вызов заменяется полным кодом из встроенной функции, и вызов не выполняется. Это может привести к многократному дублированию кода, но должно привести к более быстрому выполнению, если только увеличение размера кода не вызывает проблем с кешем. В некоторых случаях компилятор может игнорировать встроенную опцию и использовать обычный вызов.
Встроенные функции - хороший инструмент, когда вы хотите сохранить время работы, потому что, когда вы вызываете этот тип функции (встроенный), его код записывается в место вызова. Почему это экономит время? Поскольку вызов обычной функции просто потребляет больше времени, чем просто вставлять ее функциональность. Пример:
inline void sayHi()
{
std::cout<<"Hi!";
}
int main()
{
sayHi(); //Calling an inline function
std::cin.get();
}
compiler pastes std :: cout << "Привет!"; вместо sayHi(); Так что вы сказали, что это действительно правильно.