Функция называется чистой функцией, если она всегда возвращает один и тот же результат для одинаковых значений аргумента и не имеет побочных эффектов, таких как изменение аргумента (или глобальной переменной) или вывод чего-либо. Единственный результат вызова чистой функции — возвращаемое значение. Примерами чистых функций являются strlen (), pow (), sqrt () и т. Д. Примерами нечистых функций являются printf (), rand (), time () и т. Д.
Если функция известна как чистая для компилятора, то к ней можно применить оптимизацию цикла и исключение подвыражений . В GCC мы можем пометить функции как чистые, используя атрибут «pure».
__attribute__ ((pure)) return-type fun-name(arguments1, …) { /* function body */ }
Ниже приведен пример чистой функции, которая возвращает квадрат переданного целого числа.
|
Рассмотрим пример ниже
|
Если функция «strlen ()» не помечена как чистая функция, то компилятор будет вызывать функцию «strlen ()» при каждой итерации цикла, а если функция помечена как чистая функция, то компилятор знает, что значение «strlen ()» функция будет одинаковой для каждого вызова, поэтому компилятор оптимизирует цикл for и генерирует код следующим образом.
|
Давайте напишем нашу собственную чистую функцию для вычисления длины строки.
|
Маркировка функции как чистой говорит о том, что гипотетическая функция «my_strlen ()» безопасна для вызова меньше раз, чем говорит программа.
Эта статья составлена Narendra Kangralkar и рецензирована командой GeeksforGeeks. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Чистые виртуальные функции и абстрактные классы в C ++
- Чистый виртуальный деструктор в C ++
- SQL | Функции (агрегатные и скалярные функции)
- Теория игр (игра в нормальной форме) | Набор 4 (Доминирование-Чистая стратегия)
- Функции в C / C ++
- Вложенные функции в C
- Потоковые функции в C / C ++
- C ++ математические функции
- C | Функции | Вопрос 7
- C | Функции | Вопрос 8
- Встроенные функции в C ++
- C | Функции | Вопрос 9
- C | Функции | Вопрос 10
- Функции, которые не могут быть перегружены в C ++
- Макросы против функций
0.00 (0%) 0 votes