回答編集履歴
1
誤字の修正と補足
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
なお、C言語のみではなく、他の言語でも似たような物を持っています(ただし、全てではありませんし、組み合わせも言語によって異なります)。
|
8
8
|
|
9
9
|
さて、注意点が2つほどあります。
|
10
|
-
* `a |= b`
|
10
|
+
* `a |= b` と `a = a | b` では `a` の評価回数が異なる(前者が**1**回に対して、後者は**2**回)。
|
11
11
|
つまり、**左辺に副作用がある場合は違う結果になる**ということです。普通の代入演算子を含め、左辺に副作用がある式(`++i`とかのこと)を書くことはあまりない(というよりバグの温床になるため避けるべき)ですが、評価の回数については注意が必要です。
|
12
12
|
* C++では `operator|=()` や `operator&=()` といった一つの演算子として扱われ、オーバーロードにより、型によって異なる動きになる場合がある。
|
13
13
|
C++はCを拡張した言語のため、Cと同じだと思うと痛い目を見る箇所の一つです。標準で用意されている型については同じになるように実装されていますが、ユーザー定義の型(クラス)の場合はそうである保証はありません。ただ、想定される動作と異なる実装すること自体が良くないクラスの作り方とも言えます。
|