Rumah >pembangunan bahagian belakang >C++ >Apakah sifat pengaturcaraan fungsian fungsi C++?

Apakah sifat pengaturcaraan fungsian fungsi C++?

WBOY
WBOYasal
2024-04-11 18:12:01642semak imbas

C++ menyokong ciri pengaturcaraan berfungsi, termasuk: Fungsi tulen: diisytiharkan dengan pengubah const, jangan ubah suai input atau bergantung pada keadaan luaran. Ketidakbolehubah: Menggunakan kata kunci const untuk mengisytiharkan pembolehubah, nilainya tidak boleh diubah suai. Penilaian malas: Gunakan fungsi std::lazy untuk mencipta nilai malas dan menilai ekspresi dengan malas. Rekursi: Teknik pengaturcaraan berfungsi di mana fungsi memanggil dirinya sendiri, menggunakan kembali untuk memanggil dirinya sendiri.

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

Ciri pengaturcaraan fungsional fungsi C++

Pengaturcaraan fungsional (FP) ialah paradigma pengaturcaraan yang menekankan penggunaan fungsi tulen, kebolehubahan, penilaian malas dan rekursi. C++ menyokong ciri FP, termasuk:

Fungsi tulen

Fungsi tulen tidak mengubah suai inputnya dan tidak bergantung pada keadaan luaran. Dalam C++, fungsi tulen boleh diisytiharkan dengan pengubah 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);
}

Immutability

Objek tidak berubah tidak boleh mengubah suai nilainya. Dalam C++, anda boleh mengisytiharkan pembolehubah tidak berubah menggunakan kata kunci 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;
}

🎜Lazy evaluation🎜🎜🎜Lazy evaluation melambatkan penilaian ekspresi sehingga nilainya diperlukan. Dalam C++, nilai lazy ​​boleh dibuat menggunakan fungsi std::make_lazy dalam pustaka std::lazy: 🎜rrreee🎜🎜Recursion🎜🎜🎜Recursion ialah fungsi memanggil dirinya Teknik pengaturcaraan fungsional. Dalam C++, fungsi rekursif boleh dipanggil sendiri menggunakan kata kunci return: 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Kod berikut menunjukkan aplikasi praktikal ciri FP dalam C++:🎜rrreee

Atas ialah kandungan terperinci Apakah sifat pengaturcaraan fungsian fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn