80 lines
5.0 KiB
Markdown
80 lines
5.0 KiB
Markdown
|
---
|
|||
|
title: Inline Function
|
|||
|
localeTitle: Встроенная функция
|
|||
|
---
|
|||
|
# Встроенная функция
|
|||
|
|
|||
|
## Введение
|
|||
|
|
|||
|
Встроенная функция - это специальная функция, определенная в C ++, и при ее вызове расширяется встроенная.
|
|||
|
|
|||
|
Теперь, что это значит?
|
|||
|
|
|||
|
Всякий раз, когда вызывается функция, требуется много дополнительного времени для выполнения ряда действий, таких как переход к функции, сохранение регистров, перенос аргументов в стек и возврат к вызывающей функции. Так что это занимает много времени. Но встроенная функция - это функция, в которой компилятор был запрошен для выполнения встроенного расширения. Если функция запрашивает компилятор для вставки полного тела функции в каждое место, вызываемое функцией, вместо генерации кода для вызова функции в одном месте, она определена.
|
|||
|
|
|||
|
Однако мы не можем гарантировать, что каждая функция, объявленная inline, будет встроенной. Потому что, когда мы объявляем функцию `inline` , это запрос, а не команда. Компилятор может игнорировать запрос вложения в следующих ситуациях: - 1) Если функция содержит цикл, например, `for` цикла, `while` loop, `do-while` loop и т. Д. 2) Если функция содержит оператор `switch` или `goto` . 3) Если функция ничего не возвращает, даже если указан тип возврата (кроме, конечно, `void` ). 4) Если функция содержит статическую переменную. 5) Если функция содержит рекурсивный вызов.
|
|||
|
|
|||
|
\`\` \`c ++
|
|||
|
|
|||
|
## синтаксис: -
|
|||
|
|
|||
|
inline return _type_ имя _функции_ (argument\_list) {
|
|||
|
|
|||
|
// функция тела
|
|||
|
|
|||
|
}
|
|||
|
```
|
|||
|
## When to use Inline function
|
|||
|
|
|||
|
* When the function performs small tasks and is called very often.
|
|||
|
* When performance is important.
|
|||
|
* Instead of a macro.
|
|||
|
```
|
|||
|
|
|||
|
C ++
|
|||
|
|
|||
|
# включают
|
|||
|
|
|||
|
использование пространства имен std;
|
|||
|
|
|||
|
класс MathOperation {
|
|||
|
|
|||
|
общественности:
|
|||
|
```
|
|||
|
inline int add(int x, int y){
|
|||
|
|
|||
|
return(x+y);
|
|||
|
}
|
|||
|
|
|||
|
inline float div(int n1, float n2){
|
|||
|
|
|||
|
return(n1/n2);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
int main () {
|
|||
|
|
|||
|
MathOperation obj;
|
|||
|
|
|||
|
cout << "Дополнение:" << obj.add (34,12) << <"\\ n"; cout << "Раздел:" << obj.div (12,3.4) << "\\ n";
|
|||
|
|
|||
|
return 0;
|
|||
|
|
|||
|
} \`\` \`
|
|||
|
|
|||
|
## Преимущества функции Inline
|
|||
|
|
|||
|
* Это экономит накладные расходы на возврат вызова из функции.
|
|||
|
* Он увеличивает локальность ссылок, используя кеш команд.
|
|||
|
* Это ускоряет работу вашей программы, избегая накладных расходов на функции.
|
|||
|
* Это экономит накладные расходы на операции push / pop в стеке, когда происходят вызовы функций.
|
|||
|
* В заголовочном файле можно поместить определение функции, то есть оно может быть включено в несколько единиц компиляции без жалобы компоновщика.
|
|||
|
|
|||
|
## Недостатки встроенной функции
|
|||
|
|
|||
|
* При использовании в заголовке он делает ваш заголовочный файл более крупным с информацией, которую пользователи не заботятся.
|
|||
|
* Это увеличивает размер исполняемого файла из-за расширения кода.
|
|||
|
* C ++ inlining разрешается во время компиляции. Это означает, что если вы измените код встроенной функции, вам нужно будет перекомпилировать весь код, используя его, чтобы убедиться, что он будет обновлен.
|
|||
|
* Как упоминалось выше, он увеличивает размер исполняемого файла, что может привести к переполнению памяти. Больше ошибок страницы, что снижает производительность вашей программы.
|