Что означает оператор ?:
Что означает оператор ?:? Увидел в следующем коде:
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.