Что выведет код Middle Современный C++20/23 обновлено

Что выведет: spaceship, привязки, optional, format

Вопрос

Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.

#include <compare>
#include <format>
#include <iostream>
#include <map>
#include <optional>
#include <string>
#include <variant>

struct P {
    int x;
    int y;
    auto operator<=>(const P&) const = default;
};

int main() {
    P a{.x = 1, .y = 2}, b{.x = 1, .y = 3};
    std::cout << (a < b) << (a == b) << ((a <=> b) < 0) << '\n';
    std::map<std::string, int> m{{"b", 2}, {"a", 1}};
    for (const auto& [k, v] : m) std::cout << k << v;
    std::cout << '\n';
    std::optional<int> o;
    std::cout << o.value_or(7) << '\n';
    std::variant<int, std::string> var = std::string("hi");
    std::cout << std::get<std::string>(var) << var.index() << '\n';
    std::cout << std::format("{:>5}|{:<3}|{:.2f}", 42, "ab", 3.14159) << '\n';
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 101, a1b2, 7, hi1, 42|ab |3.14. Сравнение по полям в порядке объявления: x равны, 2 < 3, поэтому a < b истинно, a == b ложно, (a <= b) < 0 истинно.

Что выведет

101
a1b2
7
hi1
   42|ab |3.14

Разбор

Сравнение по полям в порядке объявления: x равны, 2 < 3, поэтому a < b истинно, a == b ложно, (a <=> b) < 0 истинно. Map обходится в порядке ключей: a1b2. Пустой optional отдаёт значение по умолчанию 7. Variant хранит строку, индекс альтернативы 1. {:>5} выравнивает вправо на ширину 5, {:<3} влево на 3, {:.2f} округляет до двух знаков.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.