inline double GetPiO
{
return 3.14159;
}
Аналогично функция, которая только удваивает число или выполняет похожие простьк операции, является хорошим кандидатом на встраивание. Один из таких случаев приведи в листинге 7.10.
6 Зак. 3626
ЗАНЯТИЕ 7. Организация кода при помощи функций
ЛИСТИНГ 7.10. Использование встраиваемой функции, удваивающей целое число
#include
using namespace std;
2 :
// определение встраиваемой функции удвоения
inline long DoubleNum (int InputNum)
{
return InputNum * 2;
}
:
int main()
10: {
cout « "Enter an integer: ";
int InputNum = 0;
cin » InputNum;
14:
// Вызов встраиваемой функции
cout « "Double is: " « DoubleNum(InputNum) « endl;
return 0;
}
Результат
Enter an integer: 35
Double is: 70
Анализ
Рассматриваемое ключевое слово, i n l i n e , используется в строке 4. Компиляторы, как правило, рассматривают это ключевое слово как просьбу поместить содержимое функции DoubleNum () непосредственно по месту ее вызова (строка 16), что увеличивает скорость выполнения кода.
то же время указание функций как встраиваемых способно увеличить размер кода, особенно если встраиваемая функция содержит сложную обработку или имеет большой размер. Использовать ключевое слово i n l i n e следует по минимуму и только для тех функций, которые выполняют простые действия, сравнимые по объему с дополнительны ми затратами на вызов обычной функции, как упоминалось ранее.
Самые современные компиляторы C++ обладают различными возможностя ми по оптимизации производительности. Некоторые, такие как компилятор Microsoft C++ Compiler, позволяют оптимизировать по размеру или скорости приложения. Первое весьма важно при разработке программного обеспече ния для различных устройств, как правило, мобильных, где память может быть очень ценна. При оптимизации по размеру компилятор отклоняет большинство просьб о встраивании, поскольку это может увеличить размер кода.
При оптимизации по скорости компилятор обычно удовлетворяет просьбы о встраивании (там, где это имеет смысл) и делает это иногда даже в тех случаях, когда никто его об этом не просит.
Как процессор обрабатывает вызовы функций
|
163
|
С++11
Лямбда-функции
Этот раздел — только введение в сложную для новичков концепцию. Попробуйте из учить ее, но не расстраивайтесь, если это не получится. Более подробная информация о лямбда-функциях приведена на занятии 22, “Лямбда-выражения языка С++1 Г \
Лямбда-функции очень полезны, если вы часто используете алгоритмы STL для сор тировки и обработки данных, содержащихся, например, в таких контейнерах STL, как s t d : : v e c t o r (динамический массив). Как правило, сортировка требует предоставить двоичный предикат, реализованный как оператор в классе, что требует весьма кропот ливого программирования. Компиляторы, совместимые со стандартом С++11, позволяют создавать лямбда-функции и не тратить много усилий, как показано в листинге 7.11.
ЛИСТИНГ 7.11. Использование лямбда-функции для сортировки
отображения элементов массива________________________________________________
Do'stlaringiz bilan baham: |