先頭へ戻る

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

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

先頭へ戻る

演算子の一覧

優先度 演算子 機能 結合の向き 解説ページ
1 :: スコープ解決 左から右
2 () 関数呼び出し 左から右
[] 配列の要素 文字列の入力
-> ポインタからのメンバアクセス
. メンバアクセス 構造体
++ 後置インクリメント for文
後置デクリメント for文
type()、type{} 関数形式キャスト
static_cast キャスト
dynamic_cast キャスト
const_cast キャスト
reinterpret_cast キャスト
typeid 型情報の取得
3 ! 論理否定 右から左
~ ビット否定
++ 前置インクリメント for文
前置デクリメント for文
+ 符号 計算
- 符号を反転させる 計算
* ポインタの間接参照
& メモリアドレス
sizeof 変数や型の大きさを取得
(type) キャスト
new、new[] 動的メモリ割り当て
delete、delete[] 動的に割り当てたメモリの解放
alignof アラインメント値を取得
4 .* ポインタメンバへのアクセス 左から右
->* ポインタメンバへのアクセス
5 * 乗算 乗算と除算
/ 除算 乗算と除算
% 剰余 乗算と除算
6 + 加算 左から右 計算
- 減算 計算
7 << 左シフト 左から右
>> 右シフト
8 < 左の方が小さい 左から右 論理値
<= 左が右以下 論理値
> 左の方が大きい 論理値
>= 左が右以上 論理値
9 == 等しい 左から右 論理値
!= 等しくない 論理値
10 & ビット積 左から右
11 ^ ビット排他的論理和 左から右
12 | ビット和 左から右
13 && 論理積 左から右
14 || 論理和 左から右
15 ? : 条件演算子 右から左 if文と条件演算子
= 代入 代入
+= 加算代入 代入
-= 減算代入 代入
*= 乗算代入 代入
/= 除算代入 代入
%= 剰余代入 代入
<<= 左シフト代入
>>= 右シフト代入
&= ビット積代入
|= ビット和代入
^= ビット排他的論理和代入
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 でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー