●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++11から導入されたラムダ式(Lambda Expression)は、無名関数(名前のない関数)を簡潔に書ける便利な機能です。 ちょっとした関数をその場で定義できるため、コードがすっきりし、柔軟な処理が可能になります。

ラムダ式の基本構文

[キャプチャ] (引数) → 戻り値の型 { 関数本体 };

戻り値の型は省略可能です。最もシンプルなラムダ式は以下のように書けます:

auto func = []() {
    cout << "Hello Lambda!" << endl;
};

func();  // 呼び出し

引数付きのラムダ式

auto add = [](int a, int b) {
    return a + b;
};

cout << add(3, 4);  // → 7

ラムダ式は関数のように、引数を受け取って値を返すことができます。

キャプチャ(外部変数の使用)

ラムダ式の外で定義された変数を使うには、キャプチャが必要です。

int x = 5;

auto f = [x]() {
    cout << x << endl;
};
f();

キャプチャの種類

書き方意味
[]何もキャプチャしない
[x]xを値渡しでキャプチャ
[&x]xを参照でキャプチャ
[=]すべての変数を値渡しでキャプチャ
[&]すべての変数を参照でキャプチャ

関数にラムダ式を渡す

#include <algorithm>
#include <vector>

vector<int> nums = {3, 1, 4, 2};

sort(nums.begin(), nums.end(), [](int a, int b) {
    return a > b;
});

このように、比較関数のようにちょっとした処理をその場で書きたいときに非常に便利です。

戻り値の型を明示する場合

auto divide = [](int a, int b) -> double {
    return (double)a / b;
};

戻り値の型が複雑なときや、型推論できないときは -> 戻り値の型 を明記できます。

ラムダ式とstd::function

#include <functional>

std::function<int(int, int)> op;

op = [](int a, int b) { return a * b; };

cout << op(3, 5);  // → 15

std::function を使えば、ラムダ式を関数オブジェクトとして柔軟に扱えます。

ラムダ式のメリット

  1. 関数をその場で定義できる
  2. スコープを汚さずに一時的な処理が書ける
  3. コールバック処理やSTLアルゴリズムと相性が良い

注意点

  • キャプチャの仕組みを正しく理解しないとバグの原因になる
  • 複雑なラムダ式は可読性を下げることも

まとめ

C++のラムダ式は、簡潔で柔軟な関数処理を可能にする強力な機能です。 キャプチャや戻り値の扱いに注意しながら使えば、よりシンプルでメンテナンスしやすいコードが書けるようになります。

まずは `[](){}` から始めて、引数やキャプチャの使い方に慣れていきましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方