📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「</source>」を「</syntaxhighlight>」に置換 |
細 文字列「source lang」を「syntaxhighlight lang」に置換 |
||
| 16行目: | 16行目: | ||
== ラムダ式の文法 == | == ラムダ式の文法 == | ||
< | <syntaxhighlight lang="c++"> | ||
int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||
{ | { | ||
| 31行目: | 31行目: | ||
== 最小のラムダ式の定義 == | == 最小のラムダ式の定義 == | ||
< | <syntaxhighlight lang="c++"> | ||
int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||
{ | { | ||
| 41行目: | 41行目: | ||
<br> | <br> | ||
引数は省略可能であるため、さらに省略できる。<br> | 引数は省略可能であるため、さらに省略できる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||
{ | { | ||
| 53行目: | 53行目: | ||
== 最小のラムダ式の呼び出し == | == 最小のラムダ式の呼び出し == | ||
ラムダ式を呼び出すには、関数呼び出し式()を使用する。<br> | ラムダ式を呼び出すには、関数呼び出し式()を使用する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||
{ | { | ||
| 64行目: | 64行目: | ||
== サンプルコード == | == サンプルコード == | ||
===== ラムダ式で書くHello World ===== | ===== ラムダ式で書くHello World ===== | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 77行目: | 77行目: | ||
===== ラムダ式を変数に代入する ===== | ===== ラムダ式を変数に代入する ===== | ||
ラムダ式を変数に代入することができる。関数ポインタのような感覚で呼び出せる。<br> | ラムダ式を変数に代入することができる。関数ポインタのような感覚で呼び出せる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 91行目: | 91行目: | ||
===== ラムダ式を関数に渡す ===== | ===== ラムダ式を関数に渡す ===== | ||
ラムダ式を別の関数に渡すことができる。(コールバック関数)<br> | ラムダ式を別の関数に渡すことができる。(コールバック関数)<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 109行目: | 109行目: | ||
<br> | <br> | ||
===== ラムダ式に引数を与える ===== | ===== ラムダ式に引数を与える ===== | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||
| 129行目: | 129行目: | ||
1つ目は、明示的に戻り値の型を定義していない。<br> | 1つ目は、明示的に戻り値の型を定義していない。<br> | ||
2つ目は、明示的に戻り値の型を定義している。アロー演算子の記法([]()->型)で表現している。<br> | 2つ目は、明示的に戻り値の型を定義している。アロー演算子の記法([]()->型)で表現している。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 147行目: | 147行目: | ||
ラムダ式は、式が定義される関数のスコープの変数をキャプチャできる。<br> | ラムダ式は、式が定義される関数のスコープの変数をキャプチャできる。<br> | ||
JavaScriptでいうクロージャが、スコープにある変数を参照できることをイメージすること。<br> | JavaScriptでいうクロージャが、スコープにある変数を参照できることをイメージすること。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||
| 163行目: | 163行目: | ||
===== 参照の場合の代入 ===== | ===== 参照の場合の代入 ===== | ||
参照での代入とコピーでの代入を行う。<br> | 参照での代入とコピーでの代入を行う。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||
| 186行目: | 186行目: | ||
しかし、コピーのため、元の変数の値は変更できない。<br> | しかし、コピーのため、元の変数の値は変更できない。<br> | ||
mutableを指定した時、ラムダ式の引数リストの括弧は省略できない。<br> | mutableを指定した時、ラムダ式の引数リストの括弧は省略できない。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||
| 202行目: | 202行目: | ||
<br> | <br> | ||
また、mutableを指定した時、明示的に戻り値を指定する場合は、以下のようにする。<br> | また、mutableを指定した時、明示的に戻り値を指定する場合は、以下のようにする。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
auto dRet = []() mutable -> double {return 3.14;}; | auto dRet = []() mutable -> double {return 3.14;}; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 209行目: | 209行目: | ||
===== キャプチャの指示 ===== | ===== キャプチャの指示 ===== | ||
ラムダキャプチャ[]には、変数ごとにキャプチャの方法(コピーまたは参照)を指定できる。<br> | ラムダキャプチャ[]には、変数ごとにキャプチャの方法(コピーまたは参照)を指定できる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 227行目: | 227行目: | ||
<br> | <br> | ||
また、一部の変数だけ指定して、残りは、キャプチャのデフォルトを指定することができる。<br> | また、一部の変数だけ指定して、残りは、キャプチャのデフォルトを指定することができる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 248行目: | 248行目: | ||
<br> | <br> | ||
また、以下のように、デフォルトと同じキャプチャは指定できない。<br> | また、以下のように、デフォルトと同じキャプチャは指定できない。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
int a = 0, | int a = 0, | ||
b = 0; | b = 0; | ||
| 259行目: | 259行目: | ||
===== thisポインタとキャプチャ ===== | ===== thisポインタとキャプチャ ===== | ||
thisポインタは、ポインタであるため、キャプチャがコピーでも参照でも、以下のように変数iは変更される。<br> | thisポインタは、ポインタであるため、キャプチャがコピーでも参照でも、以下のように変数iは変更される。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
| 283行目: | 283行目: | ||
std::functionを使用することで、ラムダ式を関数から返すことができる。<br> | std::functionを使用することで、ラムダ式を関数から返すことができる。<br> | ||
キャプチャがコピーであるため、変数strは破棄されない。<br> | キャプチャがコピーであるため、変数strは破棄されない。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||