演算子の一覧 | 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 管理者情報 プライバシーポリシー
先頭へ戻る