Что выведет код 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 ошибок.