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); |
デフォルト実引数の指定 | 「コンストラクタ」 |
= | template <typename T = int> |
デフォルトテンプレート実引数の指定 | 「クラステンプレート」「関数テンプレート」 |
= | [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; |
C言語スタイルのキャスト | 「アサート」「配列とポインタ」 |
() | 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) |
式を連結する | 「if文と条件演算子」 |
, | 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... |
可変引数テンプレートの可変部分の引数(パラメータパック)を展開する | |
… | sizeof... |
パラメータパックに含まれている個数を取得 | |
… | 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 はそのような名前の変数に過ぎない。 |
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |