mori– Author –
-
C++樹林
ロック不要で安全?thread_localでスレッドごとの状態を管理する方法
マルチスレッドプログラミングで頭を悩ませるのが、複数のスレッドからアクセスされる変数の管理です。すべてのスレッドで共有されるstatic変数は、データ競合を防ぐためにロック(Mutex)が必須となり、コードを複雑にします。 しかし、「スレッド間では... -
C++樹林
並列アルゴ-リズムで処理を高速化!安全な使い方と注意点
最近のコンピューターは、複数の計算コア(マルチコア)を搭載するのが当たり前になりました。この計算能力を最大限に活用し、重い処理を高速化する強力な仕組みが、標準ライブラリに用意されています。 この記事では、標準アルゴリズムを「並列化」して実... -
C++樹林
C++23の新機能!std::generatorで遅延シーケンスを簡単に生成しよう
大量のデータを順番に処理したいとき、皆さんはどう実装しますか?std::vectorに全てのデータを格納してからループ処理する方法が一般的ですが、「もしデータが無限に続くとしたら?」「全てのデータをメモリに保持したくない」といったケースでは、この方... -
C++樹林
C++ヘッダファイルのお作法: #pragma once 対 インクルードガード
C++で複数のファイルに分割して開発を進めていると、同じヘッダファイルを意図せず複数回インクルードしてしまい、「クラスが再定義されています」といったコンパイルエラーに遭遇することがあります。これはC++の**ODR(One Definition Rule - ワン・デフ... -
C++樹林
C++の隠し味?コンパイラ固有の属性 __declspec と __attribute__ を解説
C++プログラミングにおいて、時にはコンパイラに対して標準機能の範囲を超える、より詳細な指示を与えたい場面があります。例えば、「この関数はDLLからエクスポートする」「この構造体は特定のメモリ境界に配置してほしい」といったケースです。 この記事... -
C++樹林
C++の基底クラスにアクセス!謎のキーワード__superとは?
C++のクラス継承において、派生クラスから基底クラスのメンバ関数を呼び出すのは日常的な操作です。通常はBase::func()のように基底クラス名を明示しますが、Microsoft社のVisual C++コンパイラには、__superという特別なキーワードが用意されています。 ... -
C++樹林
C++の型名を読みやすく!typeidの結果をデマングルする方法
C++でデバッグやログ出力を行う際、typeid(some_variable).name() を使って変数の型名を取得することがあります。しかし、特にテンプレートや名前空間を使った複雑な型の場合、出力された文字列が N2NS5InnerIiE のような暗号めいたものになり、困惑した経... -
C++樹林
たった1行でC++を高速化!OpenMPによるforループ並列化入門
「この重たいループ処理、もっと速くならないだろうか…」 C++での開発において、計算量の多いforループの実行速度は常に課題となります。近年のCPUは複数のコアを持つ「マルチコア」が当たり前。この有り余るパワー、活かさないのはもったいないですよね。... -
C++樹林
C++の性能を限界まで引き出す!SIMD組み込み関数入門
C++で最高のパフォーマンスを追求する際、コンパイラの最適化だけでは到達できない領域があります。そのような場面で強力な武器となるのが、CPUの機能を直接叩く**「組み込み関数(Intrinsic Functions)」**です。 この記事では、組み込み関数とは何か、... -
C++樹林
【C++開発者向け】CUDAとThrustライブラリで始めるGPU高速化入門
C++で大規模なデータを扱う際、その計算速度がボトルネックになっていませんか? 本記事では、その解決策となり得るGPGPU技術について、特にC++開発者が取り組みやすいNVIDIAのCUDAとThrustライブラリに焦点を当て、その基本から実践的なサンプルコードま... -
C言語樹林
【C言語入門】条件で繰り返すwhileループ!do-whileとの違いも解説
C言語の繰り返し処理といえば for ループが代表的ですが、「繰り返す回数が決まっていない」場合には while ループが非常に役立ちます。例えば、「ユーザーが特定の文字を入力するまで」や「ファイルの終端に達するまで」といった処理に最適です。 この記... -
C言語樹林
【C言語入門】計算の基本!算術演算子と代入演算子の使い方
C言語でプログラミングを行う上で、足し算や引き算といった数値計算は避けて通れません。これらの計算を行うために使われる記号が**「演算子」**です。 この記事では、C言語における数値計算の基本となる算術演算子と、変数に値を設定するための代入演算子... -
C言語樹林
【C言語の基本】演算子とは?比較、論理、ビット演算など全種を徹底解説
C言語のプログラミングは、変数や値に対して様々な「操作」を行うことで成り立っています。その操作を指示するための記号が**「演算子」**です。 +や-といった算術演算子はもちろん、C言語には条件分岐や高度なデータ操作を可能にするための豊富な演算子が... -
C++樹林
【C++】typeid の使い方 | 実行時のオブジェクトの型を判別する方法 (RTTI)
はじめに C++の継承とポリモーフィズム(多態性)を使うと、親クラスへのポインタの配列に、様々な種類の子クラスオブジェクトをまとめて格納できます。しかし、時には「このポインタが今指しているのは、『戦士』オブジェクトなのか、それとも『魔法使い... -
C++樹林
【C++】抽象クラスと純粋仮想関数とは?継承先に実装を強制する方法
はじめに C++の継承において、親クラス(基底クラス)の段階では具体的な処理内容は決められないが、「このクラスを継承する子クラス(派生クラス)は、必ずこの機能(メンバ関数)を実装しなければならない」というルールを設けたい場合があります。 例え... -
C++樹林
【C++】仮想関数 (virtual) とは?ポリモーフィズム(多態性)を実現する方法
はじめに C++の継承では、親クラス(基底クラス)へのポインタを使って、子クラス(派生クラス)のオブジェクトを指し示すことができます。しかし、ここで一つ問題があります。 親クラスのポインタ->関数() のように呼び出した場合、通常は**ポインタの... -
C++樹林
【C++】基本クラスへのポインタで、派生クラスのオブジェクトを指す方法
はじめに C++の継承において、「is-a 関係」という重要な概念があります。これは、「車は乗り物の一種である」というように、子クラスが親クラスの一種である、という関係性を示すものです。 この is-a 関係があるため、C++では、親クラスを指すポインタを... -
C++樹林
【C++】子クラスで親クラスのメンバ関数をオーバーライドする方法
はじめに C++の継承では、子クラス(派生クラス)は親クラス(基底クラス)のメンバ関数を引き継ぎます。しかし、時には「親クラスの機能を、子クラス独自の処理に**上書き(変更)**したい」という場面があります。 このように、親クラスから継承したメン... -
C++樹林
【C++】継承におけるメンバへのアクセスルール (public, protected, private)
はじめに C++の継承では、子クラスは親クラスのメンバを引き継ぎますが、全てのメンバに自由にアクセスできるわけではありません。親クラスのメンバが public, protected, private のどれで宣言されているかによって、子クラスの内部から、またクラスの外... -
C++樹林
【C++】継承で、子クラスから親クラスの引数付きコンストラクタを呼び出す方法
はじめに C++の継承において、子クラスのオブジェクトが生成される際には、必ず親クラスのコンストラクタが先に呼び出されます。もし親クラスに引数なしのデフォルトコンストラクタしか存在しない場合は、コンパイラが自動でそれを呼び出してくれます。 し... -
C++樹林
【C++】クラスの継承入門 | 既存のクラスを再利用して新しいクラスを作る方法
はじめに オブジェクト指向プログラミングの三本柱の一つである「継承 (Inheritance)」は、既にあるクラスの機能(メンバ変数やメンバ関数)を受け継いで、新しいクラスを定義するための強力な仕組みです。 例えば、「乗り物」という基本的なクラスがあれ... -
C言語樹林
【C言語入門】配列の基本!たくさんのデータをまとめて扱う方法
プログラミングをしていると、「クラス全員のテストの点数」や「1週間の最高気温」のように、たくさんの同じ種類のデータを扱いたい場面がよく出てきます。そんなとき、score1, score2, score3... のように一つ一つ変数を宣言するのは大変ですよね。 この... -
C言語樹林
【C言語入門】文字配列と文字列の違いとは?strcpy, strlenなど基本関数も徹底解説
C言語で文字の集まりを扱う際、「文字配列」と「文字列」という2つの言葉が出てきます。これらは似ているようで、C言語の世界では非常に重要な違いがあります。 この記事では、両者の決定的な違いと、C言語で文字列を自在に扱うための必須ライブラリ関数 (... -
C言語樹林
【C言語入門】2次元配列をマスターしよう!表やグリッド形式のデータ扱いの基本
C言語の配列を学習すると、次に登場するのが2次元配列です。1次元の配列が「一列に並んだリスト」だとすれば、2次元配列は**「縦横に広がる表(テーブル)やグリッド」**とイメージすると分かりやすいでしょう。 エクセルのシートや、ゲームのマップ、座席... -
C言語樹林
【C言語入門】関数の基本!#include, 引数, 戻り値を理解して使いこなそう
C言語には、プログラミングを助けてくれる便利な「道具」がたくさん詰まった標準ライブラリというものが用意されています。画面に文字を表示する printf も、このライブラリに含まれる関数の一つです。 これらの便利な関数を使いこなすには、いくつかの基... -
C言語樹林
【C言語入門】自作関数の作り方!定義の基本からプロトタイプ宣言まで
C言語のプログラミングにおいて、同じような処理を何度も書いていると、コードが長くなり、読みにくくなってしまいます。そんな問題を解決するのが**「自作関数」**です。 処理を一つのまとまりとして関数化することで、コードの再利用性が高まり、プログ... -
C言語樹林
【C言語の基本】グローバル変数とローカル変数の違いとは?変数の有効範囲(スコープ)を理解しよう
C言語で変数を宣言するとき、その変数がプログラムの**「どこからどこまで使えるか」という有効範囲が決まっています。この有効範囲のことをスコープ**と呼びます。 スコープを正しく理解しないと、「使えるはずの変数にアクセスできない」「意図しない場... -
C言語樹林
【C言語の基本】メモリとアドレスとは?変数がコンピュータのどこに保存されるか見てみよう
私たちがC言語で int score = 100; のように変数を宣言するとき、その score という変数はコンピュータのどこに、どのように保存されているのでしょうか?この謎を解く鍵が**「メモリ」と「アドレス」**です。 この記事では、プログラムの舞台裏で動いてい... -
C言語樹林
【C言語の最重要機能】ポインタの基本を徹底解説!初心者でも必ずわかる
C言語を学ぶ上で、誰もが一度は「難しい」と感じる概念、それが**「ポインタ」**です。しかし、ポインタを理解することで、C言語の真の力を引き出し、より高度で効率的なプログラミングが可能になります。 この記事では、そんなポインタの基本的な考え方か... -
C言語樹林
ポインタ配列:複数の文字列をスマートに管理する
ポインタ配列とは、その名の通り、各要素がポインタである配列のことです。特に char* 型のポインタ配列は、複数の文字列をまとめて管理する際に非常に便利です。 通常の二次元配列 char str[4][20]; では、すべての要素が固定の長さ(この場合は20バイト...