先頭へ戻る

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

Programming Place Plus トップページ新C++編

先頭へ戻る

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

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

記号の一覧

記号 使用例 意味 詳細な解説へのリンク
+ a = b + c; 加算(足し算) 計算
+ a = +10; 符号。特に効果はない 計算
+= a += 10; 変数に対して加算(足し算)を行い、結果をその変数に代入する 代入
++ ++a;
a++
変数の値に +1 する。変数名の手前に置くのと、後ろに置くのとでは動作に違いがある for文
- a = b - c; 減算(引き算) 計算
- a = -10; 符号を反転させる 計算
-= a -= 10; 変数に対して減算(引き算)を行い、結果をその変数に代入する 代入
--a;
a--
変数の値に -1 する。変数名の手前に置くのと、後ろに置くのとでは動作に違いがある 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)
[&] [&](){}
[&a](){}
ラムダ式の参照キャプチャ
&= a &= 0x01; 変数に対してビット積 (AND) を取り、結果をその変数に代入する
&& int&& r = v; 右辺値参照であることを表す
&& if (a && b) 論理AND 要素を探索する
| a = b | 0x01; ビット和 (OR)
|= a |= 0x01; 変数に対してビット和 (OR) を取り、結果をその変数に代入する
|| if (a || b) 論理OR 要素を探索する
^ a = b ^ 0x01; 排他的ビット和 (XOR)
^= a ^= 0x01; 変数に対して排他的ビット和 (XOR) を取り、結果をその変数に代入する
~ a = ~b; ビット否定 (NOT)
~ ~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 –>「符号無し整数
<> #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); デフォルト引数の指定
= 0 virtual void f() = 0; 純粋仮想関数の宣言
= delete void f() = delete; 関数の削除
= default void f() = default; デフォルトの関数を宣言
[=] [=](){}
[=a](){}
[a=b](){}
ラムダ式のコピーキャプチャ。= の右側に式がある場合は初期化キャプチャ
== 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};
配列の要素数の指定 配列
[] a[1] = 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文
関数の定義 –>「関数を作る
, 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__);
_Bool b = 0;
int _x;
特に意味のない普通の文字
たとえば、__LINE__ はそのような名前のマクロ、_Bool はそのような名前の型、_x はそのような名前の変数に過ぎない。

参考リンク


更新履歴



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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー