C++樹林– category –
-
C++樹林
【C++】クラスのメンバ変数 | データの種類とアクセス制御を徹底解説
はじめに C++のクラスは、オブジェクトの状態を表すデータを保持します。このクラス内で宣言された変数のことを「メンバ変数」または「データメンバ」と呼びます。メンバ変数には、オブジェクトごとに存在する通常の変数、クラス全体で共有される静的変数... -
C++樹林
【C++】継承のすべて | 仮想関数から抽象クラス、多重継承までを徹底解説
はじめに C++の**継承 (Inheritance)**は、オブジェクト指向の三本柱の一つであり、コードの再利用性を高め、拡張性の高い階層構造を構築するための強力な機能です。 この記事では、C++の継承にまつわる以下の主要な概念を、RPGのキャラクターを例に、網羅... -
C++樹林
【C++】関数オブジェクト(ファンクタ)とは?()演算子オーバーロードの使い方
はじめに C++のstd::sortのような標準アルゴリズムは、ソートの順序などをカスタマイズするために、比較ルールを引数として受け取ることができます。この「ルール」を渡す方法の一つが、**関数オブジェクト(ファンクタ)**です。 関数オブジェクトは、()... -
C++樹林
【C++】オーバーロード入門 | 関数と演算子を多重定義する方法
はじめに C++では、同じスコープ内に、同じ名前の関数や演算子を複数定義することができます。これを**オーバーロード(多重定義)**と呼びます。コンパイラは、渡された引数の型や個数(シグネチャ)を元に、どのバージョンを呼び出すべきかを自動的に判... -
C++樹林
【C++】テンプレート (template) 入門 | 汎用的な関数とクラスの作り方
はじめに C++のテンプレート (template) は、型をパラメータ化することで、汎用的なコードを書くための非常に強力な機能です。単に関数やクラスを汎用化するだけでなく、可変長の引数を扱ったり、特定の型に対して特別な処理を定義したりと、C++の表現力を... -
C++樹林
【C++】constexprとは?コンパイル時定数を使いこなす方法
はじめに C++で、配列のサイズやテンプレートの引数を指定する際、その値はコンパイル時に確定している必要があります。従来は、const修飾子を付けた定数などがこの役割を担っていましたが、より複雑な計算結果をコンパイル時定数として扱いたい、という要... -
C++樹林
【C++】ラムダ式の使い方を徹底解説(キャプチャ、ジェネリックラムダ)
はじめに C++でstd::sortやstd::find_ifのような標準アルゴリズムを使う際、条件を指定するためだけに関数を別途定義するのは面倒な場合があります。 C++11で導入されたラムダ式は、このような「その場で使い捨ての簡単な関数が欲しい」という要求に応える... -
C++樹林
【C++20】コルーチン入門 | 処理を中断・再開できる関数の作り方
はじめに C++の通常の関数は、一度呼び出されたら、returnするまで処理を中断できません。しかし、非同期処理や、データを少しずつ生成するジェネレータのような機能では、「処理の途中で一旦中断し、呼び出し元に制御を戻し、後でまた続きから再開する」... -
C++樹林
【C++】プリプロセッサ指令 (#include, #define, #if 等) の使い方を徹底解説
はじめに C++のソースコードが、コンパイラによって機械語に翻訳される前には、「プリプロセス(前処理)」というステップが存在します。プリプロセッサは、このステップで動作し、# で始まる特別な**ディレクティブ(指令)**に従って、ソースコードのテ... -
C++樹林
【C++】名前空間 (namespace) の使い方を徹底解説(スコープ、エイリアス、using)
はじめに C++で大規模なプログラムを開発したり、複数の外部ライブラリを組み合わせて使ったりすると、異なる場所で定義された関数や変数が、偶然同じ名前を持ってしまうことがあります。これを「名前の衝突(競合)」と呼び、コンパイルエラーや意図しな... -
C++樹林
【C++】属性 ([[noreturn]], [[deprecated]]など) の使い方を解説
はじめに C++11以降、属性 [[...]] という統一的な構文が導入されました。属性は、コードの様々な要素(関数、クラス、変数など)に付加情報を与え、コンパイラの最適化を助けたり、特定のコードの使われ方について警告を出させたりするためのものです。 ... -
C++樹林
【C++】エラーハンドリングの3つの主要な方法(戻り値・例外・グローバル変数)
はじめに C++で堅牢なプログラムを作成するには、エラーハンドリングが不可欠です。ファイルが見つからない、ネットワークに接続できない、不正な入力が行われた、といったエラーは日常的に発生します。これらのエラーを放置すると、プログラムはクラッシ... -
C++樹林
【C++】標準例外クラスの使い方 | out_of_range 等のエラーを使い分ける
はじめに C++でエラーが発生した際、単に throw "エラーメッセージ"; のように文字列を投げるのではなく、標準ライブラリ <stdexcept> などで定義されている標準例外クラスを使うのが良い習慣です。 これらのクラスは std::exception を基底クラスと... -
C++樹林
【C++】noexcept の使い方 | 例外を送出しないことを明示する
はじめに C++の関数は、潜在的に例外を投げる可能性があります。しかし、ゲッター関数やムーブコンストラクタのように、「この関数は絶対に例外を送出しない」と分かっているものも多くあります。 C++11で導入された**noexcept指定子は、関数宣言の後ろに... -
C++樹林
【C++】std::error_code と system_error | OSレベルのエラーを扱う方法
はじめに C++で、ファイルが存在しない、ネットワークがダウンしている、アクセス権がない、といったOSが原因のエラーを処理する場合、単なる int のエラーコードを返すだけでは、エラーの原因が何であるかが分かりにくくなります。 C++11では、このような... -
C++樹林
【C++】std::exception_ptrで例外を保存・再送出する方法
はじめに C++の例外処理では、catchブロックで例外を捕捉すると、その場で処理するのが基本です。しかし、特にマルチスレッドプログラミングなどでは、「ワーカースレッドで発生した例外を、メインスレッドに伝えて、そこで処理させたい」という場面があり... -
C++樹林
【C++17】std::optional の使い方 | 値が存在しない可能性を表現する方法
はじめに C++で、関数が処理に成功した場合は値を返し、失敗した場合は「値がない」ことを示したい、という場面は頻繁にあります。従来は、-1のような特別な値(番兵)を返したり、ポインタでnullptrを返したり、boolの成否フラグを別途返したり、といった... -
C++樹林
【C++23】std::expected の使い方 | 正常値とエラー値を返す新しい方法
はじめに C++で、成功すれば結果を、失敗すればエラー情報を返したい関数を設計する際、従来はエラーコードを別途引数で受け取る、std::optionalを使う、例外を投げる、などの方法がありました。 C++23では、この「成功または失敗」を表現するための、より... -
C++樹林
【C++】assert の使い方 | 実行時にプログラムの前提条件をチェックする方法
はじめに プログラミングでは、「この関数が呼ばれるとき、このポインタはNULLであってはならない」「この変数の値は、必ず正の数のはずだ」といった、コードが正しく動作するための前提条件が存在します。 C言語由来の <cassert> (C++では <cass... -
C++樹林
【C++】static_assert でコンパイル時にアサーションを行う方法
はじめに プログラミングでは、テンプレートや定数式など、プログラムの実行前(コンパイル時)に満たされているべき特定の前提条件があります。例えば、「テンプレート引数は必ず正の数でなければならない」「sizeof(int)は4バイトでなければならない」と... -
C++樹林
【C++】プログラムを終了させる4つの方法 (exit, quick_exit, terminate)
はじめに C++のプログラムは、通常はmain関数の最後まで実行され、return 0; によって正常に終了します。しかし、時にはプログラムの途中で、特定の条件に基づいて即座に終了させたい場合があります。 C++の標準ライブラリ <cstdlib> と <excepti... -
C++樹林
【C++】std::stringオブジェクトを構築(生成・初期化)する様々な方法
はじめに C++のstd::stringは、文字列を柔軟に扱うための非常に強力なクラスです。その柔軟性は、オブジェクトを生成する際の豊富なコンストラクタに支えられています。 空の文字列として生成するだけでなく、C言語スタイルの文字列リテラルから、あるいは... -
C++樹林
【C++】std::stringの基本操作 | 代入・連結・比較の方法をまとめて解説
はじめに C++の**std::string**クラスは、C言語スタイルのchar配列が抱える煩雑さや危険性を解消し、文字列を安全で直感的に扱えるように設計されています。まるでintやdoubleのような基本データ型のように、自然な構文で様々な操作が可能です。 この記事... -
C++樹林
【C++】std::stringの文字数を取得する.size()と.length()の使い方
はじめに C++でstd::stringを扱う際、その文字列に何文字含まれているかという「長さ」を取得したい場面は頻繁にあります。 この目的のために、std::stringクラスには .size() と .length() という2つのメンバ関数が用意されています。この記事では、これ... -
C++樹林
【C++】std::stringの文字列を空にする.clear()の使い方
はじめに C++でstd::stringを扱う際、ループ処理の中で同じstring変数を再利用する前など、「文字列の中身を一旦すべて削除して、空の状態に戻したい」という場面があります。 この目的のために、std::stringクラスには .clear() というメンバ関数が用意さ... -
C++樹林
【C++】std::stringが空かどうかを判定する.empty()の使い方
はじめに C++でstd::stringを扱う際、ユーザーからの入力が空だった場合や、処理の途中で文字列が空になったかどうかを判定したい場面は頻繁にあります。 この判定には、.empty() というメンバ関数を使うのが、最もシンプルで推奨される方法です。.empty()... -
C++樹林
【C++】std::stringをC言語関数(printf等)で使う方法 (.c_str, .data)
はじめに C++でプログラミングをする際、printfやmemcpy、あるいは古いライブラリの関数など、引数としてC言語スタイルの文字列(終端NULL文字 (\0) で終わる char 配列へのポインタ)を要求するものを使いたい場面が時々あります。 しかし、C++のモダンな... -
C++樹林
【C++】std::stringをイテレータで操作する方法(iterator, const_iterator)
はじめに C++のstd::stringは、内部的には文字のコンテナであり、std::vectorなどと同様に、その要素(個々の文字)にアクセスするためのイテレータを提供します。イテレータは、文字列内の特定の位置を指し示す、ポインタのように振る舞うオブジェクトで... -
C++樹林
【C++】std::string::substrで部分文字列を抽出する方法
はじめに C++でstd::stringを扱う際、「文字列の先頭から5文字だけ取り出したい」「3文字目から4文字分を抜き出したい」といった、部分文字列を抽出したい場面は非常に多くあります。 この目的のために、std::stringクラスには .substr() というメンバ関数... -
C++樹林
【C++】stoi, stod で文字列を数値に変換する方法
はじめに C++で、ユーザーが入力した "123" のような文字列を、計算で使える 123 という数値(intやdouble)に変換したい場面は非常に多くあります。 C++11では、この目的のために <string> ヘッダーに、stoX (string to X) と呼ばれる一連の便利な...