Rumah >pembangunan bahagian belakang >C++ >Apakah mekanisme potongan jenis untuk ungkapan lambda dalam fungsi C++?

Apakah mekanisme potongan jenis untuk ungkapan lambda dalam fungsi C++?

WBOY
WBOYasal
2024-04-25 13:36:01937semak imbas

Apabila ungkapan lambda menangkap pembolehubah daripada skop yang disertakan, jenis pulangan disimpulkan kepada jenis pembolehubah yang ditangkap. Jika berbilang pembolehubah ditangkap, jenis pulangan disimpulkan bersama daripada jenisnya. Mekanisme ini membolehkan jenis pemulangan ungkapan lambda disimpulkan dan secara automatik mengendalikan pelbagai jenis bekas apabila diperlukan.

C++ 函数中 lambda 表达式的类型推导机制是什麼?

Mekanisme potongan jenis untuk ungkapan lambda dalam fungsi C++

Ekspresi lambda ialah cara yang mudah untuk menentukan fungsi tanpa nama dalam C++. Ungkapan ini membenarkan potongan jenis dalam fungsi untuk jenis pulangannya.

Mekanisme Potongan Jenis

Apabila ungkapan lambda menangkap pembolehubah daripada skop lampirannya, jenis pulangan yang disimpulkan akan sama dengan jenis pembolehubah yang ditangkap. Contohnya:

int main() {
  int x = 10;
  auto lambda = [x] { return x; };
  int result = lambda();
}

Dalam contoh ini, ungkapan lambda menangkap pembolehubah x, jadi jenis pulangannya disimpulkan sebagai int dan ia boleh disimpan dalam int pembolehubah. x,因此其返回类型推导出为 int,并且可以将其存储在 int 变量中。

如果捕获了多个变量

如果 lambda 表达式捕获了多个变量,则其返回类型将由捕获的变量的类型共同推导出来。例如:

struct Point {
  int x;
  int y;
};

int main() {
  Point point = {1, 2};
  auto lambda = [point] { return point.x + point.y; };
  int result = lambda();
}

在此示例中,lambda 表达式捕获结构体 Point 的实例 point,因此其返回类型推导出为 int,并且可以将其存储在 int 变量中。

实战案例

以下是很好的实战案例,展示了 lambda 表达式的类型推导:

#include <iostream>
#include <vector>

template <typename T>
void print_vector(const std::vector<T>& v) {
  for (auto& element : v) {
    std::cout << element << " ";
  }
  std::cout << std::endl;
}

int main() {
  std::vector<int> v1 = {1, 2, 3};
  std::vector<double> v2 = {1.5, 2.5, 3.5};

  print_vector(v1);
  print_vector(v2);
}

在此示例中,print_vector 函数使用 lambda 表达式来推导出 T

🎜Jika berbilang pembolehubah ditangkap🎜🎜🎜Jika ungkapan lambda menangkap berbilang pembolehubah, jenis pulangannya akan disimpulkan bersama daripada jenis pembolehubah yang ditangkap. Contohnya: 🎜rrreee🎜Dalam contoh ini, ungkapan lambda menangkap contoh titik struktur Point, jadi jenis pulangannya disimpulkan sebagai int code> , dan boleh disimpan dalam pembolehubah <code>int. 🎜🎜🎜Kes Praktikal🎜🎜🎜Berikut ialah kes praktikal yang baik menunjukkan terbitan jenis ungkapan lambda: 🎜rrreee🎜Dalam contoh ini, fungsi print_vector menggunakan ungkapan lambda untuk menyimpulkanT jenis, dan mengendalikan pelbagai jenis bekas secara automatik. Fungsi ini akan menaip menyimpulkan jenis pulangan yang betul dan membenarkan mencetak kandungan bekas daripada jenis yang berbeza. 🎜

Atas ialah kandungan terperinci Apakah mekanisme potongan jenis untuk ungkapan lambda dalam 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