| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Оператор вывода |
| Автор: pappyly 23.2.2011, 12:54 |
| Всем привет, я только начал изучать С++, и столкнулся с оператором вывода, точнее с двумя: printf и cout, в чем разница и какой лучше если есть разница... |
| Автор: Фантом 23.2.2011, 13:02 |
| Первый - стандартная функция форматного вывода для C (имеющийся и в C++), второй - поток вывода для C++. В С++ идеологически правильнее, пожалуй, использовать cout, но можно и оба - как больше нравится. |
| Автор: KaraKum 23.2.2011, 13:13 | ||||
Вдобавок к этому, printf() потоко-безопасная функция, а std::cout нет, например если из двух параллельно работающих потоков написать строки "помиловать" и "нельзя казнить" с помощью printf(), то гарантированно так и получится:
но если посредством std::cout, то может получиться, например, так:
потому что, в этом случае, пока выводилась первая строка ("помиловать"), то в это время втиснулась строка "нельзя казнить" между словом "помиловать" и символом конца строки, после чего дописался символ конца строки из "помиловать" (получилась пустая строка между ними) и дальше остатки строки "нельзя казнить". |
| Автор: pappyly 23.2.2011, 13:49 |
| всем спасибо за понятные ответы, я все уяснил. |
| Автор: volatile 24.2.2011, 00:06 | ||
Это еще хорошо. Я когда баловался с выводом в cout с разных потоков получал что-то вроде:
|
| Автор: alexvs11 24.2.2011, 00:15 |
поэтому трассировки обычно делают в блокировках потоки это хорошо, но printf/sprintf не заменят в случаях, когда это удобней потоковых вариантов (речь о std::cout, std::stringstream) имхо манипуляторы не самая удобная вещь а вот файловые потоки c++ по сравнению с сишными FILE много удобнее Добавлено через 1 минуту и 36 секунд ну и да, это не операторы первый функция, а второй глобальный объект std::ostream |
| Автор: mes 24.2.2011, 00:33 | ||
во первых printf подходит только для плоских типов.. к тому же он потенциально опасен в С++-контексте.. во вторых для случаев когда требуется отформатировать по шаблону существует другие инструменты, например http://www.boost.org/doc/libs/1_46_0/libs/format/index.html.. Добавлено через 3 минуты и 23 секунды там не говорилось, что это операторы языка.. это не внутриязыковое понятие.. под "оператороми вывода" подразумеваются любые средства языка, непосредственно позволяющие этот вывод осуществить.. |
| Автор: alexvs11 24.2.2011, 01:03 | ||||
подразумевается поддержка operator<< и неявного приведения? в большинстве случаев их использование - сомнительный ход существует синхронизация потоков стандартной библиотеки и ++ых потоков, ну и sscanf, sprintf разве чем-то опасны?
буст хорошо, но внешняя зависимость же, не все воля программиста
очень широкий взгляд на понятие оператора, как для программировании (операторы с точки зрения грамматики), так и для математики |
| Автор: mes 24.2.2011, 01:20 | ||||||
изначально значение слова оператор было несколько другое...
Добавлено @ 01:30
при чем тут это ? имелась ввиду "неадекватность" применения эллипсисных функций к объектам С++. |
| Автор: pappyly 24.2.2011, 14:24 |
| Народ, народ вы слегка оторвались от темы, и не забывайте вы все это объясняете мне - новичку, которому не очень понятны ваши заумные фразы, я ведь только начал изучать язык; пожалуйста можно как-нибудь по проще? |
| Автор: kemiisto 24.2.2011, 14:31 |
| Использую std::cout. |
| Автор: Modul 24.2.2011, 14:51 | ||
|
| Автор: mes 24.2.2011, 15:50 |
| printf и компания - подходят только для простых стандартных типов и нужны фактически только при программировании в с-стиле.. |
| Автор: Modul 24.2.2011, 17:04 |
| Дядьки в своих материях ... Ну как ? Получилось ? |
| Автор: alexvs11 24.2.2011, 20:41 | ||
пример в котором действительно прям требуется применение потоков? |
| Автор: mes 24.2.2011, 21:05 | ||
любой, которой подразумевает вывод и которому не нужен с-стиль.. возможность реализовать через printf будет обходным вариантом в большинстве случаев и несет в себе потенциальную опасность.. |
| Автор: alexvs11 24.2.2011, 22:52 |
| опасность обвала стека это понятно (причем на разных компьютерах еще может иметь и разное поведения), но вот где потоки принципиально удобней использовать сишных функций вывода? чтото не представляется такого |
| Автор: pappyly 24.2.2011, 23:24 |
| да спасибо Modul, кстати я тоже компилирую в microsoft visual c++, и обязательно писать return 0? |
| Автор: bsa 26.2.2011, 19:43 |
| Примерно так же, как надевать штаны перед выходом на улицу. Можно, конечно, и не надевать... Мне лично не лень написать "лишних" 9 символов, так как после этого ни у кого не возникнет вопросов, что же возвращает обычно main(). |
| Автор: alexvs11 26.2.2011, 20:01 |
| по стандарту необязательно |