Rumah pembangunan bahagian belakang C++ Bagaimanakah ungkapan C++ Lambda melakukan inferens jenis?

Bagaimanakah ungkapan C++ Lambda melakukan inferens jenis?

Jun 03, 2024 pm 01:41 PM
c++ lambda

Inferens jenis ungkapan lambda C++ membolehkan pengkompil menentukan jenis nilai pulangan lambda: jika lambda hanya mempunyai satu pernyataan pulangan, jenis nilai pulangan ialah jenis ungkapan pulangan. Jika lambda mempunyai berbilang penyata pemulangan, jenis pemulangan ialah salah satu daripada jenis ini (pengkompil mungkin mengeluarkan amaran). Jika tiada penyata pulangan, jenis nilai pulangan adalah tidak sah.

C++ Lambda 表达式如何进行类型推断?

Jenis Inferens untuk Ungkapan Lambda dalam C++

Ekspresi Lambda ialah ciri sintaksis yang berkuasa dalam C++ yang membolehkan penciptaan fungsi tanpa nama pada masa jalan. Inferens jenis untuk ungkapan lambda ialah ciri utama yang membolehkan pengkompil menentukan jenis nilai pulangan bagi ungkapan lambda. . pembolehubah.

(senarai parameter) ialah senarai parameter pilihan yang menentukan parameter yang diterima oleh ungkapan lambda.

-> return-type ialah penentu jenis pulangan pilihan yang menentukan jenis nilai pulangan bagi ungkapan lambda. Taip inferens

Jika jenis nilai pulangan tidak ditentukan, pengkompil akan cuba membuat kesimpulan berdasarkan peraturan berikut dalam ungkapan lambda:

    Jika ungkapan lambda mengandungi penyataan return, jenis nilai pulangan ialah jenis ungkapan return.
    Jika ungkapan lambda mengandungi satu atau lebih pernyataan return, tetapi ia mengembalikan nilai jenis yang berbeza, jenis nilai pulangan ialah mana-mana jenis tersebut. Dalam kes ini, pengkompil boleh mengeluarkan amaran.
  • Jika ungkapan lambda tidak mengandungi pernyataan return, jenis nilai return ialah void.
  • [capture list] 是一个可选的捕获列表,指定 lambda 表达式可以访问的外部变量。
  • (parameter list) 是一个可选的参数列表,指定 lambda 表达式接收的参数。
  • -> return-type 是一个可选的返回类型指定符,指定 lambda 表达式的返回值类型。

类型推断

如果未指定返回值类型,编译器将尝试根据 lambda 表达式中的以下规则推断它:

  1. 如果 lambda 表达式包含一条 return 语句,则返回值类型为 return 表达式的类型。
  2. 如果 lambda 表达式包含一个或多个 return 语句,但它们返回不同类型的值,则返回值类型为这些类型中的任何一个。在这种情况下,编译器可能会发出警告。
  3. 如果 lambda 表达式不包含 return 语句,则返回值类型为 void

实战案例

案例 1:使用类型推断

以下 lambda 表达式使用类型推断,返回值类型为 int

auto lambda = [capture list] (parameter list) -> return-type {
    // lambda function body
}
Salin selepas log masuk

案例 2:指定返回值类型

以下 lambda 表达式显式指定返回值类型为 std::string

auto lambda = [] (int a, int b) {
    return a + b;
};
Salin selepas log masuk

案例 3:推断多重返回类型

以下 lambda 表达式包含两个 return 语句,返回类型推断为 intstd::string

Kes praktikal🎜🎜🎜🎜Kes 1: Menggunakan inferens jenis🎜🎜🎜Ungkapan lambda berikut menggunakan inferens jenis dan jenis nilai pulangan ialah int: 🎜rreee 🎜🎜 Kes 2: Tentukan jenis nilai pulangan 🎜🎜🎜Ungkapan lambda berikut secara eksplisit menentukan jenis nilai pulangan sebagai std::string: 🎜
auto lambda = [] (std::string a, std::string b) -> std::string {
    return a + b;
};
Salin selepas log masuk
🎜🎜Kes 3: Membuat kesimpulan berbilang jenis pulangan 🎜🎜 Ungkapan lambda berikut Formula mengandungi dua pernyataan return, dan jenis return disimpulkan sebagai int atau std::string: 🎜
auto lambda = [] (int a, std::string b) {
    if (a < 0) {
        return a;
    } else {
        return b;
    }
};
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah ungkapan C++ Lambda melakukan inferens jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Jun 05, 2024 am 11:00 AM

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++?

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Jun 05, 2024 pm 01:02 PM

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Jun 05, 2024 am 11:50 AM

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL?

Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++? Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++? Jun 06, 2024 pm 04:16 PM

Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++?

Persamaan dan Perbezaan antara Golang dan C++ Persamaan dan Perbezaan antara Golang dan C++ Jun 05, 2024 pm 06:12 PM

Persamaan dan Perbezaan antara Golang dan C++

Bagaimana untuk menyalin bekas C++ STL? Bagaimana untuk menyalin bekas C++ STL? Jun 05, 2024 am 11:51 AM

Bagaimana untuk menyalin bekas C++ STL?

Apakah prinsip pelaksanaan asas penunjuk pintar C++? Apakah prinsip pelaksanaan asas penunjuk pintar C++? Jun 05, 2024 pm 01:17 PM

Apakah prinsip pelaksanaan asas penunjuk pintar C++?

Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor? Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor? Jun 05, 2024 am 11:49 AM

Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor?

See all articles