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; }