📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「</source>」を「</syntaxhighlight>」に置換
文字列「source lang」を「syntaxhighlight lang」に置換
 
16行目: 16行目:


== ラムダ式の文法 ==
== ラムダ式の文法 ==
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
  {
  {
31行目: 31行目:


== 最小のラムダ式の定義 ==
== 最小のラムダ式の定義 ==
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
  {
  {
41行目: 41行目:
<br>
<br>
引数は省略可能であるため、さらに省略できる。<br>
引数は省略可能であるため、さらに省略できる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
  {
  {
53行目: 53行目:
== 最小のラムダ式の呼び出し ==
== 最小のラムダ式の呼び出し ==
ラムダ式を呼び出すには、関数呼び出し式()を使用する。<br>
ラムダ式を呼び出すには、関数呼び出し式()を使用する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
  {
  {
64行目: 64行目:
== サンプルコード ==
== サンプルコード ==
===== ラムダ式で書くHello World =====
===== ラムダ式で書くHello World =====
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
77行目: 77行目:
===== ラムダ式を変数に代入する =====
===== ラムダ式を変数に代入する =====
ラムダ式を変数に代入することができる。関数ポインタのような感覚で呼び出せる。<br>
ラムダ式を変数に代入することができる。関数ポインタのような感覚で呼び出せる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
91行目: 91行目:
===== ラムダ式を関数に渡す =====
===== ラムダ式を関数に渡す =====
ラムダ式を別の関数に渡すことができる。(コールバック関数)<br>
ラムダ式を別の関数に渡すことができる。(コールバック関数)<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
109行目: 109行目:
<br>
<br>
===== ラムダ式に引数を与える =====
===== ラムダ式に引数を与える =====
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>
129行目: 129行目:
1つ目は、明示的に戻り値の型を定義していない。<br>
1つ目は、明示的に戻り値の型を定義していない。<br>
2つ目は、明示的に戻り値の型を定義している。アロー演算子の記法([]()->型)で表現している。<br>
2つ目は、明示的に戻り値の型を定義している。アロー演算子の記法([]()->型)で表現している。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
147行目: 147行目:
ラムダ式は、式が定義される関数のスコープの変数をキャプチャできる。<br>
ラムダ式は、式が定義される関数のスコープの変数をキャプチャできる。<br>
JavaScriptでいうクロージャが、スコープにある変数を参照できることをイメージすること。<br>
JavaScriptでいうクロージャが、スコープにある変数を参照できることをイメージすること。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>
163行目: 163行目:
===== 参照の場合の代入 =====
===== 参照の場合の代入 =====
参照での代入とコピーでの代入を行う。<br>
参照での代入とコピーでの代入を行う。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>
186行目: 186行目:
しかし、コピーのため、元の変数の値は変更できない。<br>
しかし、コピーのため、元の変数の値は変更できない。<br>
mutableを指定した時、ラムダ式の引数リストの括弧は省略できない。<br>
mutableを指定した時、ラムダ式の引数リストの括弧は省略できない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>
202行目: 202行目:
<br>
<br>
また、mutableを指定した時、明示的に戻り値を指定する場合は、以下のようにする。<br>
また、mutableを指定した時、明示的に戻り値を指定する場合は、以下のようにする。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  auto dRet = []() mutable -> double {return 3.14;};
  auto dRet = []() mutable -> double {return 3.14;};
  </syntaxhighlight>
  </syntaxhighlight>
209行目: 209行目:
===== キャプチャの指示 =====
===== キャプチャの指示 =====
ラムダキャプチャ[]には、変数ごとにキャプチャの方法(コピーまたは参照)を指定できる。<br>
ラムダキャプチャ[]には、変数ごとにキャプチャの方法(コピーまたは参照)を指定できる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>


227行目: 227行目:
<br>
<br>
また、一部の変数だけ指定して、残りは、キャプチャのデフォルトを指定することができる。<br>
また、一部の変数だけ指定して、残りは、キャプチャのデフォルトを指定することができる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
248行目: 248行目:
<br>
<br>
また、以下のように、デフォルトと同じキャプチャは指定できない。<br>
また、以下のように、デフォルトと同じキャプチャは指定できない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int a = 0,
  int a = 0,
     b = 0;
     b = 0;
259行目: 259行目:
===== thisポインタとキャプチャ =====
===== thisポインタとキャプチャ =====
thisポインタは、ポインタであるため、キャプチャがコピーでも参照でも、以下のように変数iは変更される。<br>
thisポインタは、ポインタであるため、キャプチャがコピーでも参照でも、以下のように変数iは変更される。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
283行目: 283行目:
std::functionを使用することで、ラムダ式を関数から返すことができる。<br>
std::functionを使用することで、ラムダ式を関数から返すことができる。<br>
キャプチャがコピーであるため、変数strは破棄されない。<br>
キャプチャがコピーであるため、変数strは破棄されない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>