SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【C++の新機能を理解する】最新バージョンを徹底解説!

C++の新機能を理解する──rangesライブラリとジェネレータ

【C++の新機能を理解する】最新バージョンを徹底解説! 第3回

コルーチンベースで効率的なジェネレータstd::generator[C++ 23]

 C++ 23では、コルーチンベースのジェネレータstd::generatorが使えるようになりました。

 C++23で導入されたstd::generatorは、コルーチン機能を活用して、値を順次生成・返却するジェネレータです。これにより、関数の途中で一時停止し、必要なタイミングで値の生成を再開することが可能になります。

 std::generatorはco_yieldキーワードを用いて、値を一つずつ外部に返すことができます。これにより、関数の状態を保持したまま、効率的に次の値を生成し続けることが可能です。これは無限列や遅延評価が必要なシーケンスの生成などに特に有効です。

[NOTE]コルーチン

 コルーチンはC++ 20で導入された機能で、プログラムの実行を一時停止し、後で再開できる特殊な関数です。co_await、co_yield、co_returnといったキーワードを使用し、非同期処理や逐次的なデータ生成などをシンプルに表現できます。

 ジェネレータは、generator<T>から生成されるクラスです。以下のリストは、1から引数n - 1までの値を生成するジェネレータの例です。

リスト generator.cpp
#include <generator> // generator<T>に必要
#include <iostream>
…略…
// 1からnの値を返すジェネレータ
generator<int> count_up_to(int n) {
  for (int i = 0; i < n; i++) {
    co_yield i;			// 値を呼び出し元に返す
  }
}

int main() {
  // ジェネレータは範囲for文で使える
  for (int value : count_up_to(10)) {
    cout << value << " " << endl;
  }
  return 0;
}

 count_up_to関数はco_yieldを使って値を返し、main関数内の範囲for文でその値を順次受け取っています。

まとめ

 今回は、C++ 23における関数面の強化点を、rangesライブラリとジェネレータstd::generatorを中心に紹介しました。次回は、rangesやジェネレータ以外の標準ライブラリの機能強化について紹介します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
【C++の新機能を理解する】最新バージョンを徹底解説!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/23848 2026/04/15 08:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー