Здравствуйте, Went, Вы писали:
W>Ну в этом же и суть, что в интерполяции нет разбора строки на этапе исполнения. То есть это ни в коем случае не сахар поверх format, а наиболее оптимальный из возможных способ сборки строки из базы и плейсхолдеров, потому что всё то, что можно, компилятор может вытянуть на этапе компиляции.
Что можно собрать на этапе компиляции? Только то, что фиксированного размера в выводе. Так что строки и числа не фиксированной длины отпадают. Например:
std::string str = std::format("a = {var} - ok");
особо оптимизировать не получится. Если var, скажем, int, то он может быть и 4 и 444. А значит в результирующую строку всё равно придётся складывать минимум из двух частей: "a = 444" и " — ok". То есть на каждую числовую переменную теоретически можно сэкономить одну операцию конкатенации строк. А если var — это строка, то сэкономить уже ничего не получится. Однако я сильно сомневаюсь, что кто-то будет заниматься такой мелочной оптимизацией.
W>std::format же принципиально другой подход, напротив, где оптимальность уступается в угоду гибкости (например, в разных локализациях плейсхолдеры могут идти в разном порядке). О чем же мы спорим?
Поправьте меня, если я ошибаюсь, но std::format первым параметром берёт форматную строку — объект, который компилятор может построить из строки на этапе компиляции.
Короче, можете объяснить: где вы предполагаете возможность оптимизации?