Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นิพจน์แลมบ์ดาใน C ++


C++ STL มีฟังก์ชันทั่วไปที่เป็นประโยชน์ เช่น std::for_each น่าเสียดายที่พวกเขาสามารถใช้งานได้ค่อนข้างยุ่งยาก โดยเฉพาะอย่างยิ่งหาก functor ที่คุณต้องการใช้นั้นไม่ซ้ำกันสำหรับฟังก์ชันเฉพาะ ดังนั้นฟังก์ชันที่คุณจะสร้างนี้จะอยู่ในเนมสเปซนั้นเพียงแค่ถูกใช้ในที่เดียว วิธีแก้ไขคือใช้ฟังก์ชันที่ไม่ระบุตัวตน

C ++ ได้แนะนำนิพจน์แลมบ์ดาใน C ++ 11 เพื่ออนุญาตให้สร้างฟังก์ชันที่ไม่ระบุชื่อ ตัวอย่างเช่น

ตัวอย่าง

#include<iostream>
#include<vector>
#include <algorithm> // for_each
using namespace std;
int main() {
   vector<int> myvector;
   myvector.push_back(1);
   myvector.push_back(2);
   myvector.push_back(3);
   for_each(myvector.begin(), myvector.end(), [](int x) {
      cout << x*x << endl;
   });
}

ผลลัพธ์

1
4
9

(int x) ใช้เพื่อกำหนดอาร์กิวเมนต์ที่นิพจน์แลมบ์ดาจะถูกเรียกด้วย [] ใช้เพื่อส่งผ่านตัวแปรจากขอบเขตโลคัลไปยังขอบเขตภายในของแลมบ์ดา ซึ่งเรียกว่าการจับตัวแปร นิพจน์เหล่านี้ถ้าง่าย สามารถอนุมานประเภทได้โดยอัตโนมัติ คุณยังสามารถระบุข้อมูลประเภทได้อย่างชัดเจนโดยใช้ไวยากรณ์ต่อไปนี้

[](int x) -> double {
   return x/2.0;
}