Cтраница 1
Подставляемые функции обычно являются функциями-членами класса. Часто их определения ( т.е. сами функции) размещаются в заголовочном файле вслед за объявлением класса. [1]
Подставляемая функция может быть также определена в объявлении класса. Я еще не рассказывал о классах, поэтому отложим обсуждение этой возможности до завтра. [2]
Подставляемая функция ( inline function) включается в исполняемый файл каждый раз, когда к ней происходит обращение. [3]
Подставляемые функции объявляются подобно обычным функциям, но с использованием ключевого слова inline. Когда компилятор встречает в исходном тексте программы обращение к подставляемой функции, он помещает в исполняемый файл отдельную копию этой функции. Подставляемые функции выполняются быстрее, поскольку фактически вызова функции не происходит. [4]
Обратите внимание, что использование подставляемых функций чревато и некоторыми издержками. Если функция вызывается 10 раз, то во время компиляции в программу будет вставлено 10 копий этой функции. За увеличение скорости выполнения программы нужно будет расплатиться размерами программного кода, в результате чего ожидаемого повышения эффективности программы может и не произойти. [5]
Часто вместо макросов удобно объявить подставляемую функцию. Например, в листинге 21.3 создается функция CUBE, которая выполняет ту же работу, что и макрос CUBE в листинге 21.2, но в данном случае это делается способом, обеспечивающим контроль за соответствием типов. [6]
Компилятор будет помещать в объектный файл полный код подставляемой функции каждый раз, когда эта функция встречается в исходном тексте программы. Обычная функция включается в объектный файл только один раз, а при появлении ее в исходном тексте компилятор будет вставлять вызов этой функции. [7]
В каких случаях лучше использовать макрос, чем подставляемую функцию. [8]
Следующее, на что нужно обратить внимание в заголовочном файле - это использование подставляемых функций. Эти функции настолько малы, что имеет смысл сделать их подставляемыми. Вы могли также заметить, что класс Airplane имеет одну перегруженную функцию с именем GetStatusQ. При вызове с аргументом в виде символьного массива она возвращает строку состояния, а при вызове без аргументов - значение переменной status. Заметьте, что из всех членов-данных лишь один является открытым. Доступ к остальным членам возможен только через открытые функции. [9]
Опция Disable Inline Expansions ( Запретить подстановку функций) управляет тем, как компилятор обрабатывает вызовы подставляемых функций. По умолчанию, тело функции подставляется в месте ее вызова. [10]
Как мы знаем, ситуация теоремы 9 не самый общий случай образования сложной функции; вообще, каждая из подставляемых функций ft зависит от своей группы аргументов. Но случай, когда эти группы различны, сводится к рассмотренному в теореме 9 добавлением к каждой группе недостающих ей аргументов. [11]
Основная идея вариационного метода состоит в том, что для искомой величины ( например, собственной частоты) находится такая формула, выражающая эту величину в виде интеграла от какой-либо функции ( например, от поля собственного колебания), которая, во-первых, дает точное значение искомой величины, если в нее подставить точное значение функции, и, во-вторых, при подстановке приближенного значения функции дает для искомой величины приближенное значение с существенно меньшей погрешностью, чем погрешность подставляемой функции. Такие выражения ( функционалы - они дают число в результате операций, производимых над функцией) называются стационарными функционалами. В § 15 будут рассмотрены стационарные функционалы от двух функций. [12]
Тело подставляемой функции начинается сразу же после объявления метода класса, причем после круглых скобок нет никакой точки с запятой. Подобно определению обычной функции, определение метода начинается с открывающей фигурной скобки и оканчивается закрывающей фигурной скобкой. [13]
Подставляемые функции объявляются подобно обычным функциям, но с использованием ключевого слова inline. Когда компилятор встречает в исходном тексте программы обращение к подставляемой функции, он помещает в исполняемый файл отдельную копию этой функции. Подставляемые функции выполняются быстрее, поскольку фактически вызова функции не происходит. [14]
Так какой же напрашивается вывод. Если в программе часто вызывается маленькая функция, состоящая из одной-двух строк, то это первый кандидат в подставляемые функции. [15]