C/C++のトークンとは?キーワード・識別子・演算子の種類をわかりやすく解説
C++におけるトークンとは、プログラムを構成する最小の単位のことです。
C++はC言語のスーパーセットであるため、Cのほとんどの構成要素は、意味や使い方が変わらないままC++でも利用できます。そのため、トークンや式、データ型もC言語とよく似ています。
C++のトークンには、主に以下の種類があります(C++のトークンの多くは、基本的にCのトークンと共通しています)。
- キーワード(予約語)
- 識別子
- 定数
- 変数
- 演算子
キーワード(予約語)
キーワードは、あらかじめ意味が固定されている予約語であり、ユーザーがその意味を変更することはできません。これらのキーワードの意味や動作は、コンパイラがすでに認識しています。C++はCよりも多くのキーワードを持っており、追加されたものには特別な機能が割り当てられています。
C言語由来のキーワードは以下の32個です。
auto const double float int short struct unsigned
break continue else for long signed switch void
case default enum goto register sizeof typedef volatile
char do extern if return static union while
さらに、Cには存在せずC++で新しく追加された予約語が30個あります。
asm dynamic_cast namespace reinterpret_cast try
bool explicit new static_cast typeid
catch false operator template typename
class friend private this using
const_cast inline public throw virtual
delete mutable protected true wchar_t
識別子
識別子とは、変数、構造体、関数など、プログラム内のさまざまな要素に付ける名前のことです。識別子はプログラムの実行時に参照されるため、一意な名前である必要があります。
識別子の命名規則
- 使用できるのは、英字・数字・アンダースコア(_)のみです。
- 先頭の文字は、英字またはアンダースコア(_)でなければなりません。
- 英字の大文字と小文字は区別されます。
- 予約語(キーワード)は識別子として使用できません。
定数
定数は変数に似ていますが、一度値を定義すると、プログラムの実行中にその値が変わることはありません。
C++で定数を定義する方法は、主に次の2通りあります。
constキーワードを使う方法#defineプリプロセッサを使う方法
定数の宣言:
const [data_type] [constant_name] = [value];
変数
変数とは、コンピュータのメモリ上にあるデータ格納領域に付けた、意味のある名前のことです。変数を使うことで、メモリアドレスを意識することなくデータを扱えます。
変数宣言の構文:
[data_type] [variable_name];
サンプルコード
#include <iostream>
int main() {
int a, b; // a と b は整数型の変数
cout << "Enter first number :";
cin >> a;
cout << "Enter the second number:";
cin >> b;
int sum;
sum = a + b;
cout << "Sum is : " << sum << "\n";
return 0;
}
演算子
C++の演算子とは、数学的な計算や論理的な操作を行うために使われる記号のことです。主な演算子は以下のカテゴリに分類されます。
- 算術演算子
- インクリメント・デクリメント演算子
- 関係演算子
- 論理演算子
- ビット演算子
- 代入演算子
- その他の演算子
算術演算子
| 演算子 | 説明 |
|---|---|
| + | 加算(足し算) |
| - | 減算(引き算) |
| * | 乗算(掛け算) |
| / | 除算(割り算) |
| % | 剰余(割り算の余り) |
インクリメント・デクリメント演算子
| 演算子 | 説明 |
|---|---|
| ++ | 値を1増やす(インクリメント) |
| -- | 値を1減らす(デクリメント) |
関係演算子
| 演算子 | 説明 |
|---|---|
| == | 等しい |
| != | 等しくない |
| > | より大きい |
| < | より小さい |
| >= | 以上 |
| <= | 以下 |
論理演算子
| 演算子 | 説明 |
|---|---|
| && | AND演算子。2つの式の論理積を求めます。(両方の式が真の場合は真、どちらか一方でも偽なら偽) |
| || | OR演算子。2つの式の論理和を求めます。(どちらか一方または両方の式が真であれば真) |
| ! | NOT演算子。式の論理否定を求めます。 |
ビット演算子
| 演算子 | 説明 |
|---|---|
| << | 左シフト演算子 |
| >> | 右シフト演算子 |
| ~ | 1の補数(ビット反転)演算子 |
| & | ビットごとのAND演算子 |
| ^ | ビットごとのXOR(排他的論理和)演算子 |
| | | ビットごとのOR(包括的論理和)演算子 |
代入演算子
| 演算子 | 説明 |
|---|---|
| = | 代入する |
| += | 加算してから代入する |
| -= | 減算してから代入する |
| *= | 乗算してから代入する |
| /= | 除算してから代入する |
| %= | 剰余を求めてから代入する |
| <<= | 左シフトしてから代入する |
| >>= | 右シフトしてから代入する |
| &= | ビットANDを適用してから代入する |
| ^= | ビットXORを適用してから代入する |
| |= | ビットORを適用してから代入する |
その他の演算子
| 演算子 | 説明 |
|---|---|
| , | カンマ演算子 |
| sizeof() | メモリ領域のサイズ(バイト数)を返します。 |
| & | メモリ上のアドレスを返します。 |
| * | 変数へのポインタを表します。 |
| ? : | 条件式(三項演算子) |
-
C/C++のmemcpy()関数の使い方と実例解説
この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ