そろそろC++やります
そろそろC++をやります。そろそろC++をやりたいからです。
何回やるかはわかりません。基礎を理解するまではやろうと思います。
という感じでやっています。
※ 初心者がメモレベルで記録するので、技術記事としてはお力になれないかもしれません。
内容
演算子
加減乗除(+
-
*
/
)や配列の添字演算子([ ]
)など、いろいろな演算をするための記号や文字です。
C++の演算子は、C言語の全ての演算子にいくつかの新しい演算子が加えられてできています。
優先順位と結合規則
優先順位
複数の演算子が含む式で、どの演算子を先に演算するかの規則
結合規則
同じ優先順位の演算子を含む式ではどちらを先に演算するかの規則
例えばこの文の場合は1 + 2 * 3 / 2
は式になります。
int a = 1 + 2 * 3 / 2;
優先順位は、乗算(*
)と除算(/
)が同じで、その下に加算(+
)があります。
`*` = `/` > `+`
*
と/
の順番は優先順位が同じなので、結合規則で決まります。これらの結合規則は左結合なので、*
を先に計算します。
当たり前のようにやっていますが、このような仕組みになっています。
より複雑になったりしたら、明示的に書く場合もあります。
int a = 1 + ((2 * 3) / 2);
代替スペル/代替表現
一部の演算子の代替スペルが<iso646.h> ヘッダーにマクロとして定義されています。
例えばこのように書き換えられます。
// 変更前 if (a > 0 && a < 10) // 変更後 if (a > 0 and a < 10)
他にもこれらが<iso646.h>に定義されています。
#define and && #define and_eq &= #define bitand & #define bitor | #define compl ~ #define not ! #define not_eq != #define or || #define or_eq |= #define xor ^ #define xor_eq ^=
こちらにも、書いてある通り、使わずに普通に書いた方が良さそうです。
優先順位と結合規則リスト
それぞれの演算子の詳細はのちのち行います。
[ ]
の中が低い方優先されます。`[3]`のみ右から左への結合なので注意が必要です。
[ 1 ]: 結合規則なし
- スコープ演算子(
::
)
[ 2 ]: 左から右へ結合
[ 3 ]: 右から左へ結合
- sizeof 演算子(
size_of
) - 前置インクリメント/デクリメント演算子(
++
,--
) - 1 の補数演算子(
~
) - 論理否定演算子(
!
) - 単項加算演算子(
+
) - 単項否定演算子(
-
) - アドレス取得演算子(
&
) - 間接演算子(
*
) - new 演算子(
new
) - delete 演算子(
delete
) - キャスト演算子(
( )
)
[ 4 ]: 左から右へ結合
[ 5 ]: 左から右へ結合
[ 6 ]: 左から右へ結合
[ 7 ]: 左から右へ結合
[ 8 ]: 左から右へ結合
- 関係演算子(
>
,<
,<=
,>=
)
[ 9 ]: 左から右へ結合
- 等値演算子(
==
,!=
)
[ 10 ]: 左から右へ結合
- ビットごとの AND 演算子(
&
)
[ 11 ]: 左から右へ結合
- ビット処理排他的 OR 演算子(
^
)
[ 12 ]: 左から右へ結合
- ビット処理包括的 OR 演算子(
|
)
[ 13 ]: 左から右へ結合
[ 14 ]: 左から右へ結合
[ 15 ]: 左から右へ結合
[ 16 ]: 左から右へ結合
- コンマ演算子(
,
)
参考リスト
感想
基本に立ち返って演算子を行いました。基本の基本。だいたいわかりますが、メンバーへのポインター演算子(.*
, ->*
)なんてあるのか、と思いました。
次回からは、それぞれの演算子について一つずつ使用例を確認します。