Namaran

Code daily. Without assist.

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では条件演算子の結果は左辺値にならないため、同じコードはコンパイルエラーです。