LoginSignup
2

More than 5 years have passed since last update.

C/C++ の条件演算子(3項演算子)は短絡評価(的なことを)する

Last updated at Posted at 2018-02-18

JIS規格では以下のように書かれています。

6.5.15 条件演算子
意味規則 第 1 オペランドを評価し,その評価の直後を副作用完了点とする。第 1 オペランドが 0 と比較して等しくない場合だけ,第 2 オペランドを評価する。第 1 オペランドが 0 と比較して等しい場合だけ,第 3 オペランドを評価する。第 2 又は第 3 オペランド(いずれか評価したほう)の値を結果とする。

つまり、こういうことが可能だということです。

int a;
int *b;
...
// a が 0 ならば 10 / a を評価しないので0除算エラーにならない
x = (a != 0) ? 10 / a : 1;
// b が NULL ならば *b を評価しないのでヌルポインタアクセスにならない
y = (b != NULL) ? *b : 1;

ちなみに、短絡評価とはこういうことをいいます。

// is_a() の値が真ならば is_b() を評価しない
x = is_a() || is_b();
// is_a() の値が偽ならば is_b() を評価しない
y = is_a() && is_b();

「3項演算子 短絡評価」でググってもトップに出てこないので書いたのですが、よく考えたら条件演算子は論理演算ではないので短絡評価とはいいません。しかし、同じキーワードで検索する人のためにこういうタイトルにしておきます。
同じ内容を書いた記事は山ほどあるので…。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2