2026-09-15
ternary_lvalue.cpp
#include <iostream>
int main() {
int a = 3, b = 5;
(a < b ? a : b) = 0;
++(a > b ? a : b);
std::cout << a << ' ' << b << '\n';
}
これはコンパイルできます。何を出力するでしょうか?
Answer
0 6(その後に改行)。C++の条件演算子は、2つの選択肢が同じ型の左辺値なら、結果もそのどちらかを指す左辺値になります。1行目はa < bが真なのでaそのものに0を代入し、2行目は0 > 5が偽なのでbをインクリメントします。なお、Cでは条件演算子の結果は左辺値にならないため、同じコードはコンパイルエラーです。