В курсе, что сущесвует эта хрень, но она очень громоздкая. Именно это основная причина моей не любви к ней. Но сейчас хороший анонимус показал пример херости и принтф-а, да.
Она ни чуть не более громоздка, нежели корректно составленная маска формата. Ни разу. Даже менее. Зато она гарантированно type safe. Что начинаешь сильно-сильно ценить однажды напоровшись на эти грабли.
У стримового стиля форматирования есть минус совсем в другой области. А именно - он не позволяет делать инлайновые макросы, которые бы разрешали или запрещали вывод без вычисления аргументов.
Ну ка, напиши мне с ходу аналог вот такого на iostream
printf("A[%04d]=%23.16lf\n", i, A[i]);
а потом заодно посчитай количество кода и оцени читабельность.
Если ты iostream аналог можешь с ходу написать и для тебя он выглядит нормально и читабельно, то я могу сделать только один вывод — тебе пора в психушку.
которая называется syslog и имеет синтаксис printf'а :)
Не факт, что это именно syslog. Уж больно он тормозной для более-менее приличного потока данных (10ки тысяч сообщений в секунду). А ведь иногда, скажем, при отладке бывает нужен и такой трафик. Впрочем, в своей области он вполне применим.
Что же до синтаксиса printf-а - у него есть свои очевидные плюсы и минусы.
Это скорее ты не встречался с отладкой трафикастых систем. Когда за секунду через сервис в параллель проходит десятки или сотни тысяч разнообразных транзакций и где-то там глубоко-глубоко живет Страшный Баг который умеет хорошо прятаться и его нужно отловить.
> давно printf не использовал, надеюсь всё правильно понял :)
Во первых это уже страшный ужас, а во вторых это всё неправильно.
В квадратных скобках пустые поля должны быть заполнены нулями, а %23.16le должен быть распечатан именно так как я написал, то есть после запятой 16 знаков, ширина поля 23.
но в эту игру можно играть вдвоём, изобразите с помощью printf вот такое
а нахера? мне религия не запрещает использовать lexical_cast
Да, действительно, слишком много букв и нетривиальных действий, с первого взгляда даже и не скажешь что оно делает.
strtol как-то понятнее и основание можно задвать любое.
stl используем во всю, а вот недоразумение под названием iostream - нет
несущественная деталь, можно добавить std::setfill('0') и всё будет хорошо
И будет еще больше нечитабельного кода.
понятно, значит не можете
Я могу, только принципиально не буду этого делать. Я за простые вещи, если что-то делается просто с помощью плюсовых конструкций - я буду их использовать, если что-то с помощью сишных - я буду их использовать.