Вложенная условная тернарная операция
int main()
{
const char x[2][20] = { "ab ", " ba" };
const char* y = "c";
for (int i = 0; i < 3; i++)
cout << ((i<2)? !i ? x[i] : y : x[1]);
}
Вывод: ab c ba
Объясните, что происходит в cout после варажения1. Что делает операция (не) с 0 и 1? Почему второй элемент массива под индексом 1 выводиться в конце?
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Возьмём это выражение ((i<2)? !i ? x[i] : y : x[1]);, отломаем ручки тому, кто его написал и чуточку перепишем.
((i<2)? (!i ? x[i] : y) : x[1])
Теперь стало понятно, кто кому.
само выражение !i - просто дает true, если i == 0 и наоборот. Переписываем
((i<2)? ( (i == 0) ? x[i] : y) : x[1])
разворачиваем:
if (i < 2) {
cout << (i == 0) ? x[i] : y;
} else {
cout << x[1];
}
ну а теперь уже все понятно
0 -> x[i]
1 -> y
2 -> x[1]