L'opérateur ternaire peut renvoyer un type référence, et lorsque l'une des expressions candidates renvoyées est une rvalue, il retourne un type non-référence.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int a = 3;
int b = 2;
// 1.
// 三目运算符返回引用
(a > b ? a : b) = 4;
cout << "a = " << a << " b = " << b <<endl; // 输出: a = 4 b = 2
// 2.
// 三目运算符返回右值
// error: lvalue required as left operand of assignment
(a < b ? a + 1 : b) = 4;
// 下面的decltype返回 int
decltype(a ? a + 1 : a) ri;
// 下面的decltype返回 int&
// error: 'r' declared as reference but not initialized
decltype(a?a:a) r;
}