int main() { return !0'0.*-+!!""; }
Что возвращает данная программа и почему?
int main() { return !0'0.*-+!!""; }
Что возвращает данная программа и почему?
Происходит вот что:
int main() {
return static_cast<int>(!0.0) * -+static_cast<int>(!!"");
}
0'0. - это число типа double, которое равно нулю. Символ ' можно использовать для разделения разрядов числа (добавлено в C++14), он игнорируется компилятором (cм. Floating point literal).
Далее, к этому числу применяется логическое отрицание, что даёт 1. Подробнее, про логическое отрицание над числом см. тут: What happens when you logical not a float?.
Далее, "" - пустая строка, к которой применяется операция двойного логического отрицания. И после приведения к int, получается 1.
Затем, выполняются унарные операции + и - для получившейся единицы, что в результате даёт -1.
Ну и наконец, выполняется произведение первой 1 и второй -1, в результате получаем всё ту же -1.
"Далее, "" - пустая строка, к которой применяется операция..." -- точнее, операция применяется к указателю (const char *) на пустую строку, а затем, получившийся тип bool приводится к int
– avp
Aug 16 '21 at 21:15