演算子の一覧 | Programming Place Plus 新C++編

トップページ新C++編

演算子の一覧

C言語の演算子一覧がこちらのページにあります。

優先度 演算子 機能 結合の向き 解説ページ
1 :: スコープ解決 左から右 列挙型
整数型
構造体とポインタ
スコープと名前空間
クラス
静的メンバ
2 () 関数呼び出し 左から右 関数を作る
関数ポインタとラムダ式
クラス
[] 配列の要素 文字列の入力
std::vector
配列
多次元配列
-> ポインタからのメンバアクセス 構造体とポインタ
クラス
. メンバアクセス 構造体
クラス
++ 後置インクリメント for文」「配列とポインタ
後置デクリメント for文」「配列とポインタ
type()、type{} 関数形式キャスト
static_cast キャスト 浮動小数点数」「符号無し整数
dynamic_cast キャスト
const_cast キャスト
reinterpret_cast キャスト 配列とポインタ」「バイナリ形式での読み書き
typeid 型情報の取得
3 ! 論理否定 右から左 要素を探索する
~ ビット単位NOT(ビット反転) ビット単位の処理
++ 前置インクリメント for文」「配列とポインタ
前置デクリメント for文」「配列とポインタ
+ 符号 計算
- 符号を反転させる 計算
* ポインタの間接参照 配列とポインタ
関数ポインタとラムダ式
& メモリアドレス メモリとオブジェクト
構造体とポインタ
関数ポインタとラムダ式
クラス
sizeof 変数や型の大きさを取得 整数型
(type) キャスト アサート」「配列とポインタ
new、new[] 動的メモリ割り当て
delete、delete[] 動的に割り当てたメモリの解放
alignof アラインメント値を取得 メモリとオブジェクト
4 .* メンバを指すポインタをクラス型のオブジェクトに結び付けて、メンバを参照する 左から右 構造体とポインタ
クラス
->* メンバポインタをクラス型のポインタに結び付けて、メンバを参照する 構造体とポインタ
クラス
5 * 乗算 乗算と除算
/ 除算 乗算と除算
% 剰余 乗算と除算
6 + 加算 左から右 計算」「配列とポインタ
- 減算 計算」「配列とポインタ
7 << 左シフト 左から右 ビット単位の処理
>> 右シフト ビット単位の処理
8 < 左の方が小さい 左から右 論理値
<= 左が右以下 論理値
> 左の方が大きい 論理値
>= 左が右以上 論理値
9 == 等しい 左から右 論理値
!= 等しくない 論理値
10 & ビット単位AND(ビット単位論理積) 左から右 ビット単位の処理
11 ^ ビット単位XOR(ビット単位排他的論理和) 左から右 ビット単位の処理
12 | ビット単位OR(ビット単位論理和) 左から右 ビット単位の処理
バイナリ形式での読み書き
13 && 論理積 左から右 要素を探索する
14 || 論理和 左から右 要素を探索する
15 ? : 条件演算子 右から左 if文と条件演算子
= 代入 代入
+= 加算代入 代入
配列とポインタ
-= 減算代入 代入
配列とポインタ
*= 乗算代入 代入
/= 除算代入 代入
%= 剰余代入 代入
<<= 左シフト代入 ビット単位の処理
>>= 右シフト代入 ビット単位の処理
&= ビット単位AND の複合代入 ビット単位の処理
|= ビット単位OR の複合代入 ビット単位の処理
^= ビット単位XOR の複合代入 ビット単位の処理
throw 例外の送出
17 , カンマ 左から右

「優先度」の列の数値が小さいものほど、演算が優先されます。演算とは、演算子ごとに異なる処理のことを指しており、/ なら除算、<< ならシフト演算といった意味です。オペランドの式から値を得ることは評価といい、(a + b) / f() であれば、a + b を計算して値を作ったり、f を呼び出して戻り値を得たりすることを指します。演算子の優先度が高いからといって、その演算子のオペランドが先に評価されるということではありません。評価の順序は、&& や ||(短絡評価)、カンマ演算子(必ず左から)、?:(第1オペランドを評価してから、第2または第3オペランドが評価される)といった一部の例外を除いて、未定義です1

「結合の向き」とは、優先度が同じ演算子が1つの式の中に複数あらわれるとき、どの演算子とどのオペランドが結びついているのかを決めるルールです。たとえば、a * b / c では、*/ は同じ優先度で、左から右の結合なので、(a * b) / c であるとみなされます。同様に、a = b = c では、= は右から左の結合なので、a = (b = c) であるとみなされます。


なお、もっとも高い優先度のところにあるので勘違いしやすいですが、( ) は関数呼び出しのものであって、a = (10 + 5) * 2; のように使われる ( ) とは異なります。これは括弧式というもので、演算子ではありません。括弧式の効果は、グループ化する範囲を示すことです。

参考リンク


更新履歴




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