Выбор ответа Middle Современный C++20/23 обновлено

Чем std::format лучше printf

Вопрос

Главное преимущество std::format перед printf:

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Типобезопасность: строка формата проверяется при компиляции. std::format("{} {:.2f}", name, price) знает типы аргументов, а строка формата проверяется при компиляции (через consteval-конструктор formatstring): несовпадение спецификатора с типом станет ошибкой компиляции, а не UB как у printf("%d",…

Варианты ответа

  1. Он всегда быстрее любых альтернатив, включая printf и потоки
  2. Он выводит текст сразу на экран, минуя буферизацию stdout
  3. Типобезопасность: строка формата проверяется при компиляцииправильный ответ
  4. Он не использует строки формата, аргументы просто склеиваются

Разбор

std::format("{} {:.2f}", name, price) знает типы аргументов, а строка формата проверяется при компиляции (через consteval-конструктор format_string): несовпадение спецификатора с типом станет ошибкой компиляции, а не UB как у printf("%d", 3.5). Для своих типов пишется специализация std::formatter.

  • Скорость хорошая, но «всегда быстрее» неверно.
  • std::format возвращает std::string; печатает сразу std::print из C++23.
  • Строки формата как раз используются.

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

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