Что означает оператор ?:

Что означает оператор ?:? Увидел в следующем коде:

int main() {
    int x = x >= false ?: 0;
    return x;
}

Почему возвращается 1?


Ответы (2 шт):

Автор решения: HolyBlackCat

Это нестандартное расширение GCC (Clang-ом тоже поддерживается), которое иногда называют "elvis operator".

a ?: b означает a ? a : b.

Разница только в том, что a вычисляется один раз, а не два.

→ Ссылка
Автор решения: Swift - Friday Pie

В С++ int x = x >= false ?: 0; не неопредено, а не должно компилироваться.

Компиляторы совместимые со стандартом GNU С++, поддерживают бинарный "оператор Элвиса" a ?: b, x = a ?: b эквивалентно записи:

std::decay_t<decltype(a)> v = a;
x = v ? v : b;

однако в вышеприведенном случае его использование приводит к неопределенному поведению, т.к. используется неинициализированное значение x.

→ Ссылка