![]() |
|
Модераторы: bsa |
![]()
|
|
| pappyly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 23.2.2011 Репутация: нет Всего: нет |
Всем привет, я только начал изучать С++, и столкнулся с оператором вывода, точнее с двумя:
printf и cout, в чем разница и какой лучше если есть разница... |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Первый - стандартная функция форматного вывода для C (имеющийся и в C++), второй - поток вывода для C++. В С++ идеологически правильнее, пожалуй, использовать cout, но можно и оба - как больше нравится.
|
|||
|
||||
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Вдобавок к этому, printf() потоко-безопасная функция, а std::cout нет, например если из двух параллельно работающих потоков написать строки "помиловать" и "нельзя казнить" с помощью printf(), то гарантированно так и получится:
но если посредством std::cout, то может получиться, например, так:
потому что, в этом случае, пока выводилась первая строка ("помиловать"), то в это время втиснулась строка "нельзя казнить" между словом "помиловать" и символом конца строки, после чего дописался символ конца строки из "помиловать" (получилась пустая строка между ними) и дальше остатки строки "нельзя казнить". Это сообщение отредактировал(а) KaraKum - 23.2.2011, 13:15 |
||||
|
|||||
| pappyly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 23.2.2011 Репутация: нет Всего: нет |
всем спасибо за понятные ответы, я все уяснил.
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
Во-первых, тут надо определить, что подразумевается под потоко-безопасностью. Во-вторых, насколько я знаю, вы запостили откровенную чушь. Стандарт ни С, ни C++ не специфицируют потоко-безопасность этих функций (что бы вы под ней не понимали). Так что здесь классичсекий случай depends on implementation. -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
поэтому трассировки обычно делают в блокировках потоки это хорошо, но printf/sprintf не заменят в случаях, когда это удобней потоковых вариантов (речь о std::cout, std::stringstream) имхо манипуляторы не самая удобная вещь а вот файловые потоки c++ по сравнению с сишными FILE много удобнее Добавлено через 1 минуту и 36 секунд ну и да, это не операторы первый функция, а второй глобальный объект std::ostream Это сообщение отредактировал(а) alexvs11 - 24.2.2011, 00:16 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
во первых printf подходит только для плоских типов.. к тому же он потенциально опасен в С++-контексте.. во вторых для случаев когда требуется отформатировать по шаблону существует другие инструменты, например boost.format.. Добавлено через 3 минуты и 23 секунды там не говорилось, что это операторы языка.. это не внутриязыковое понятие.. под "оператороми вывода" подразумеваются любые средства языка, непосредственно позволяющие этот вывод осуществить.. |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
подразумевается поддержка operator<< и неявного приведения? в большинстве случаев их использование - сомнительный ход существует синхронизация потоков стандартной библиотеки и ++ых потоков, ну и sscanf, sprintf разве чем-то опасны?
буст хорошо, но внешняя зависимость же, не все воля программиста очень широкий взгляд на понятие оператора, как для программировании (операторы с точки зрения грамматики), так и для математики |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
изначально значение слова оператор было несколько другое...
Добавлено @ 01:30
при чем тут это ? имелась ввиду "неадекватность" применения эллипсисных функций к объектам С++. Это сообщение отредактировал(а) mes - 24.2.2011, 01:34 |
||||||
|
|||||||
| pappyly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 23.2.2011 Репутация: нет Всего: нет |
Народ, народ вы слегка оторвались от темы, и не забывайте вы все это объясняете мне - новичку, которому не очень понятны ваши заумные фразы, я ведь только начал изучать язык; пожалуйста можно как-нибудь по проще?
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
Использую std::cout.
-------------------- |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
--------------------
I'll be back ! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
printf и компания - подходят только для простых стандартных типов и нужны фактически только при программировании в с-стиле..
|
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Дядьки в своих материях ...
Ну как ? Получилось ? --------------------
I'll be back ! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |