Maison  >  Article  >  développement back-end  >  Quelles sont les propriétés de programmation fonctionnelle des fonctions C++ ?

Quelles sont les propriétés de programmation fonctionnelle des fonctions C++ ?

WBOY
WBOYoriginal
2024-04-11 18:12:01625parcourir

C++ prend en charge des fonctionnalités de programmation fonctionnelle, notamment : Fonctions pures : déclarées avec le modificateur const, ne modifient pas l'entrée et ne s'appuient pas sur un état externe. Immuabilité : En utilisant le mot-clé const pour déclarer une variable, sa valeur ne peut pas être modifiée. Évaluation paresseuse : utilisez la fonction std::lazy pour créer des valeurs paresseuses et évaluer paresseusement les expressions. Récursion : technique de programmation fonctionnelle dans laquelle une fonction s'appelle elle-même, en utilisant return pour s'appeler.

C++ 函数的函数式编程特性有哪些?

Caractéristiques de programmation fonctionnelle des fonctions C++

La programmation fonctionnelle (FP) est un paradigme de programmation qui met l'accent sur l'utilisation de fonctions pures, l'immuabilité, l'évaluation paresseuse et la récursivité. C++ prend en charge les fonctionnalités FP, notamment :

Fonctions pures

Les fonctions pures ne modifient pas leurs entrées et ne s'appuient pas sur un état externe. En C++, les fonctions pures peuvent être déclarées avec le modificateur const : const 修饰符声明纯函数:

const int add(int x, int y) {
  return x + y;
}

不可变性

不可变对象无法修改其值。在 C++ 中,可以使用 const 关键字声明不可变变量:

const int x = 5;
x = 6; // 错误,不可变变量不能修改

惰性求值

惰性求值延迟计算表达式,直到需要其值。在 C++ 中,可以使用 std::lazy 库中的 std::make_lazy 函数创建惰性值:

std::lazy<int> x = std::make_lazy([] { return 5; });
std::cout << *x << "\n"; // 打印 5

递归

递归是函数调用自身的函数式编程技术。在 C++ 中,递归函数可以使用关键字 return

int factorial(int n) {
  if (n == 0) return 1;
  return n * factorial(n - 1);
}

Immutabilité

Les objets immuables ne peuvent pas modifier leurs valeurs. En C++, vous pouvez déclarer des variables immuables à l'aide du mot-clé const :

#include <array>
#include <iostream>
#include <iterator>
#include <numeric>

int main() {
  // 纯函数:计算数组元素和
  const auto sum = [](auto xs) { return std::accumulate(xs.begin(), xs.end(), 0); };

  // 不可变数组
  const std::array<int, 5> xs = {1, 2, 3, 4, 5};

  // 惰性求值:惰性求值一个纯函数
  std::lazy<int> sum_lazy = std::make_lazy([xs] { return sum(xs); });

  // 递归:计算斐波那契数列
  const auto fib = [](auto n) {
    return n == 0 ? 0 : (n == 1 ? 1 : fib(n - 1) + fib(n - 2));
  };

  // 输出值
  std::cout << "数组和:" << *sum_lazy << "\n";
  std::cout << "斐波那契数:" << fib(10) << "\n";
  return 0;
}

🎜Évaluation paresseuse🎜🎜🎜L'évaluation paresseuse retarde l'évaluation d'une expression jusqu'à ce que sa valeur soit nécessaire. En C++, les valeurs paresseuses peuvent être créées à l'aide de la fonction std::make_lazy dans la bibliothèque std::lazy : 🎜rrreee🎜🎜Recursion🎜🎜🎜Recursion est la la fonction s'appelle elle-même Techniques de programmation fonctionnelle. En C++, les fonctions récursives peuvent être appelées par elles-mêmes à l'aide du mot-clé return : 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Le code suivant montre l'application pratique des fonctionnalités FP en C++ :🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn