Lambda Expression
Lambda Expression ?
関数オブジェクトの名前が付いていません
暗黙関数
回収不可能な使い捨て関数を簡単に作成する方法
構成 [Capture](Parameter) <specifier> -> <return_type>
{
<body>
}
capture
[]で外部変数の取得方法を指定します.int x = 1;
int y = 2;
[](){ std::cout << "No captureing" << std::endl; };
[=]() { return x > y ? x : y }; // 값에 의한 캡쳐
[=]() { x = 3 }; // 값 캡쳐 방식 -> 값을 바꿀 수 없다.
[&]() { x = 3; }; // 참조 캡처 방식 -> 값 변경 가능
[x]() { std::cout << x << std::endl; }; // 특정 값 캡쳐
[x]() { std::cout << x << y << std::endl; }; // 특정 값 캡쳐
[=, &y]() // 혼합 방식
{
y = 3;
std::cout << x << y << std::endl;
}
parameter
[] { std::cout << "lol" << std::endl; } // () 생략 가능
auto myFunc = [] (int x, int y) { return x + y; };
myFunc(a, b);
specifier
mutable
値ベースのスナップオブジェクトを変更できます.
良い言語設計や既存のC++方式とは逆です.[x]() mutable { std::cout << ++x << endl; };
return_type
返還刑を指定する.
少なくとも私はあなたに類比をあげます.
短所
デバッグ
[Capture](Parameter) <specifier> -> <return_type>
{
<body>
}
capture
[]で外部変数の取得方法を指定します.
int x = 1;
int y = 2;
[](){ std::cout << "No captureing" << std::endl; };
[=]() { return x > y ? x : y }; // 값에 의한 캡쳐
[=]() { x = 3 }; // 값 캡쳐 방식 -> 값을 바꿀 수 없다.
[&]() { x = 3; }; // 참조 캡처 방식 -> 값 변경 가능
[x]() { std::cout << x << std::endl; }; // 특정 값 캡쳐
[x]() { std::cout << x << y << std::endl; }; // 특정 값 캡쳐
[=, &y]() // 혼합 방식
{
y = 3;
std::cout << x << y << std::endl;
}
parameter
[] { std::cout << "lol" << std::endl; } // () 생략 가능
auto myFunc = [] (int x, int y) { return x + y; };
myFunc(a, b);
specifier
mutable
値ベースのスナップオブジェクトを変更できます.
良い言語設計や既存のC++方式とは逆です.
[x]() mutable { std::cout << ++x << endl; };
return_type
返還刑を指定する.
少なくとも私はあなたに類比をあげます.
短所
デバッグ
Best Practice
Reference
この問題について(Lambda Expression), 我々は、より多くの情報をここで見つけました https://velog.io/@headkio/Lambda-Expressionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol