C++ lambda(람다 식)

 C++ lambda


람다 표현식 예제:

#include <algorithm>
#include <cmath>

void abssort(float* x, unsigned n) {
    std::sort(x, x + n,
        // Lambda expression begins
        [](float a, float b) {
            return (std::abs(a) < std::abs(b));
        } // end of lambda expression
    );
}


출처 : Microsoft.Doc


1. capture (AKA. Lambda-introducer)
2. parameter list.[Optional] (AKA. Lambda declarator)
3. 변경 가능한 사양[Optional]
4. exception 사양[Optional]
5. trailing-return-type[Optional]
6.Lambda body


example:

#include <iostream>

#include <algorithm>

using namespace std;
int main(void) {
	int x = 10;
	double y = 5.4;

	auto lamb_func1 = [=]() {
		//x = 3; //can't access 'x'
		return x + y;
	}();


	auto lamb_func2 = [&]() {
		x = 3; //can access 'x' 
		return x + y;
	}();


#if 1 //same function
	auto lamb_func3 = [=, x=x+1]() {
		return x + y;
	}();
#else //same function
	auto lamb_func3 = [=]() {
		int ix = x + 1;
		return ix + y;
	}();

#endif


	cout << lamb_func1 << endl;
	cout << lamb_func2 << endl;
	cout << lamb_func3 << endl;

	return 0;
}









댓글