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

นิพจน์แลมบ์ดาใน C ++ 11 คืออะไร


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

หากต้องการสำรวจ C++ lambdas โดยละเอียด ให้ไปที่เธรด StackOverflow - https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11