記号の一覧 | Programming Place Plus 新C++編

トップページ新C++編

C++ のソースコードに現れるさまざまな記号が、どういう意味であるのかを一覧できるようにしました。

新C++編の解説が C++14 をベースにしているのに合わせて、ここでも C++14 のものを取り上げています。

C言語の記号の一覧がこちらのページにあります。

記号の一覧

記号 使用例 意味 詳細な解説へのリンク
+ a = b + c; 加算(足し算) 計算」「配列とポインタ
+ a = +10; 符号。特に効果はない 計算
+= a += 10; 変数に対して加算(足し算)を行い、結果をその変数に代入する 代入」「配列とポインタ
++ ++a;
a++
インクリメント。変数名の手前に置くのと、後ろに置くのとでは動作に違いがある for文」「配列とポインタ
- a = b - c; 減算(引き算) 計算」「配列とポインタ
- a = -10; 符号を反転させる 計算
-= a -= 10; 変数に対して減算(引き算)を行い、結果をその変数に代入する 代入」「配列とポインタ
--a;
a--
デクリメント。変数名の手前に置くのと、後ろに置くのとでは動作に違いがある for文」「配列とポインタ
-> p->n = 10; クラス(構造体)型のポインタを経由して、メンバを参照する 構造体とポインタ」「クラス
-> auto f() -> int; 関数宣言において、戻り値型を後置する構文 関数を作る
-> []() -> int {return 0;} ラムダ式において、戻り値型を明示する構文 関数ポインタとラムダ式
->* p->*m メンバポインタをクラス型のポインタに結び付けて、メンバを参照する 構造体とポインタ」「クラス
* int* p; ポインタ型であることを表す メモリとオブジェクト」「配列とポインタ
* *p = 10;
int n = *p;
ポインタが指し示す先にある値を参照する(間接参照) 配列とポインタ」「関数ポインタとラムダ式
** **pp = 10; 上記の * による間接参照を繰り返している。3個以上並んでいる場合も同様 コマンドライン引数
* a = b * c; 乗算(掛け算) 乗算と除算
*= a *= 3; 変数に対して乗算(掛け算)を行い、結果をその変数に代入する 代入
*/ /* 注釈 */ コメントの終了 コメント
/ a = b / c; 除算(割り算) 乗算と除算」 
/= a /= 10; 変数に対して除算(割り算)を行い、結果をその変数に代入する 代入
/* /* 注釈 */ コメントの開始 コメント
// // 注釈 コメントの開始。行末までがコメント コメント
% a = b % 2; 剰余(割り算の余り)を求める 乗算と除算
%= a %= 2; 変数に対して剰余を求めて、結果をその変数に代入する 代入
& int& r = v; 参照型であることを表す std::vector」「構造体
& &a; メモリアドレスを取得する メモリとオブジェクト」「構造体とポインタ」「関数ポインタとラムダ式」「クラス
& a = b & 0x01; ビット単位AND ビット単位の処理
[&] [&](){} ラムダ式の(参照による)デフォルトキャプチャ 関数ポインタとラムダ式
[&x] [&x](){} ラムダ式の参照キャプチャ 関数ポインタとラムダ式
&= a &= 0x01; 変数に対してビット単位AND を取り、結果をその変数に代入する ビット単位の処理
&& int&& r = v; 右辺値参照であることを表す
&& if (a && b) 論理AND 要素を探索する
| a = b | 0x01; ビット単位OR ビット単位の処理」「バイナリ形式での読み書き
|= a |= 0x01; 変数に対してビット単位OR を取り、結果をその変数に代入する ビット単位の処理
|| if (a || b) 論理OR 要素を探索する
^ a = b ^ 0x01; ビット単位排他的論理和 ビット単位の処理
^= a ^= 0x01; 変数に対してビット単位排他的論理和を取り、結果をその変数に代入する ビット単位の処理
~ a = ~b; ビット単位否定 ビット単位の処理
~ ~MyClass(); デストラクタ
< if (a < 0) 左側の値のほうが、右側の値より小さい 論理値
<= if (a <= 0) 左側の値が、右側の値以下 論理値
<< a = b << 1; ビット列を左方向(上位の桁)へずらす(std::cout << など、異なる意味を与えられているケースがある。これは出力) ビット単位の処理」。
出力の例は「Hello, Worldプログラム
<<= a <<= 1; 変数に対してビット列を左方向(上位の桁)へずらす操作を行い、結果をその変数に代入する ビット単位の処理
<> template <typename T> テンプレート仮引数の記述
<> std::vector<int> v; テンプレート実引数の記述
<> static_cast<short>(v) キャスト先の型の記述 static_cast –>「符号無し整数
reinterpret_cast –>「配列とポインタ
<> #include <stdio.h> インクルードするヘッダの名前を囲む括弧 ヘッダファイル
> if (a > 0) 左側の値のほうが、右側の値より大きい 論理値
>= if (a >= 0) 左側の値が、右側の値以上 論理値
>> a = b >> 1; ビット列を右方向(下位の桁)へずらす(std::cin >> など、異なる意味を与えられているケースがある。これは入力) ビット単位の処理
入力の例は「入力と変数
>>= a >>= 1; 変数に対してビット列を右方向(下位の桁)へずらす操作を行い、結果をその変数に代入する ビット単位の処理
! a = !b;
if (!x)
真と偽を反転する 要素を探索する
!= if (a != b) 左側の値と、右側の値が異なる 論理値
= a = 10; 右側の値を、左側の変数に代入する 代入
= int a = 10; 変数宣言時に初期値を与える 入力と変数
= void f(int v = 10); デフォルト実引数の指定 コンストラクタ
= [a = b](){} ラムダ式の初期化キャプチャ 関数ポインタとラムダ式
= 0 virtual void f() = 0; 純粋仮想関数の宣言
= delete void f() = delete; 関数の削除 静的メンバ
= default C() = default; 特殊なメンバ関数の明示的な宣言 コンストラクタ
[=] [=](){} ラムダ式の(コピーによる)デフォルトキャプチャ 関数ポインタとラムダ式」「クラス
== if (a == 0) 左側の値と、右側の値が同じ 論理値
# #
#define XYZ "XYZ" など
各種のプリプロセッサディレクティブ プリプロセス
# #define LOG_INT(var) printf(#var ": %d\n", var)
(※冒頭の # ではなく、途中に現れるもの)
関数形式マクロの実引数を、文字列リテラルに置換する プリプロセス
## #define CAT(first,second) first ## second マクロの置換結果の中で、2つの字句を連結する プリプロセス
c = 'x'; 2つをペアで使って、文字リテラルを表現する 文字
100'000'000 大きな数を読みやすくするための区切り(意味に変化はない) int型の限界
" const char* s = "xyz"; 2つをペアで使って、文字列リテラルを表現する Hello, Worldプログラム
"" std::string operator"" s(const char* s, std::size_t size); ユーザー定義リテラルの定義
R“( )” R"(abc"abc)"; 生文字列リテラル。( ) の内側が書いたとおりに解釈される文字列リテラル
() void f(int a); 関数の仮引数 関数を作る
() f();
f(1, 2, 3);
関数を呼び出す。実引数があるなら () の内側に , で区切って書く 関数を作る」「クラス
() [](int a){} ラムダ式の仮引数 関数ポインタとラムダ式
() int n = (int)f; 型を明示的に変換する(キャスト) アサート」「配列とポインタ
() a = (b + c) / 2; 計算の優先順位を強制する 乗算と除算
() if (a == 0)
while (a == 0)
void f(int n); など
条件式や仮引数を記述するなど、構文上のルールとして if文 –>「if文と条件演算子
switch文 –>「switch文
while文 –>「while文
for文 –>「for文
do文 –>「while文
関数の宣言 –>「関数を作る
関数の定義 –>「関数を作る
[] int a[] {0, 1, 2};
int a[3] {0, 1, 2};
int a[3][5] {};
配列の要素数の指定 配列」「多次元配列
[] a[1] = 10;
a[1][2] = 10;
配列の要素を参照する際に、添字を指定する 配列」「多次元配列
[] [](){}
[=](){}
[a,&b](){}
ラムダ式のキャプチャ 関数ポインタとラムダ式
[] new X[100]; new演算子で配列を確保する
[] delete [] X; delete演算子で配列を解放する
[[]] [[noreturn]] 各種の属性(内側の文字によって異なる)
{} int v {10};
int a[] {0, 1, 2};
struct Data data {0, 1, 2};
リスト初期化。おのおのの初期化子を , で区切って並べる 入力と変数」「std::vector」「構造体」「配列」「多次元配列」「コンストラクタ
{} if (p) {}
while (*p) {}
void f(void) {} など
ブロックを構築する if文 –>「if文と条件演算子
switch文 –>「switch文
while文 –>「while文
for文 –>「for文
do文 –>「while文
関数の定義 –>「関数を作る
{} namespace n {} 名前空間を構築する スコープと名前空間
, for (i = 0, j = 0; i < 10; ++i, ++j)
int a, b, c;
式を連結する
, int array[] = {0, 1, 2};
struct Data data = {0, 1, 2};
要素の区切り std::vector」「構造体」「配列」「多次元配列
. 0.123 小数点 浮動小数点数
. s.n = 10; クラス(構造体)のメンバを参照する 構造体」「クラス
.* p.*m メンバを指すポインタをクラス型のオブジェクトに結び付けて、メンバを参照する 構造体とポインタ」「クラス
void f(int n, ...);
template <typename... T> void f(T... args);
個数や型が可変であることを表す
args... 可変引数テンプレートの可変部分の引数(パラメータパック)を展開する
catch(...) すべての例外を捕捉する
: case 0:
default:
public:
error:
ラベルの記述 case や default –>「switch文
新しいラベルを定義 –>「スコープと名前空間
: class D : public B {}; 基底クラスの指定
: C::C() : mValue(10) {} コンストラクタ初期化子 コンストラクタ
: a = (p == NULL) ? 0 : *p; 条件演算子に与えるオペランドの区切り if文と条件演算子
: for (int e : v) {} 範囲for文の構文上の区切り std::vector
: enum E : short { e1, e2 }; 列挙型において、基底型の指定 列挙型
:: C::m
::v
スコープを指示する 列挙型」「構造体とポインタ」「静的メンバ
; int a = 0;
a = 0;
for (int a = 0; a < 10; ++a)
文の終わり Hello, Worldプログラム」「for文
? a = (p == NULL) ? 0 : *p; 条件演算子に与えるオペランドの区切り if文と条件演算子
\ #define INITIALIZE(a,b,c) \
(a) = 0; \
(b) = 0; \
(c) = 0;
マクロ定義内で改行を行う プリプロセス
\ char* s = "abc\n"; など、\ に1文字が続く 特殊な意味をもった文字を表現する 文字
_ printf("%d\n", __LINE__);
wchar_t b = 0;
int _x;
特に意味のない普通の文字
たとえば、__LINE__ はそのような名前のマクロ、wchar_t はそのような名前の型、_x はそのような名前の変数に過ぎない。

参考リンク


更新履歴



新C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る