Qraizer
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору xdude Он устарел в том смысле, что является менее удобным и безопасным. Все "форматирующие в памяти" потоки были перенесены с char[] на std::basic_string<>-и и получились std:: (i/o)stringstream<>-ы, которые и рекомендуются к использованию. Так как интерфейс этих новых классов претерпел немного более существенные изменения, чем другие классы потоков (которые сохранили совместимость со старым кодом, благодаря соответствующим typedef-ам), то их и переименовали. Однако старые классы оставили (и не рекомендуют ими пользоваться) для совместимости. Я не думаю, что эти классы когда-нибудь уберут. Слишком уж много кода написано с их использованием. Тем не менее, они безусловно правы, когда не советуют ими пользоваться, ибо помимо производительности и совместимости имеются и другие критерии выбора. И мне кажется, что новые возможности, включая поддержку локалей и автоматическое слежение за своим стораджем, гораздо чаще являются более сильным аргументом. И только при действительной необходимости имеет смысл использовать старые классы. Насчёт "нерекомендованных" функций - так эта проблема решена в мультитридных библиотеках. Т.е. если ты используешь такие библиотеки - эти функции имеют по отдельному буферу на каждую нитку. Во всяком случае, так поступают MS и Borland, если новые нитки создаются не API-функцией CreateThread(), а библиотечной же какой-нибудь _beginthread(). Ты прав в своих опасениях насчёт substr(). Ты получишь именно то, что просишь. Слышал афоризм "компьютер делает не то, что вы хотите, а то, что вы сказали ему сделать"? Попробуй рассмотреть варианты Код: std::string str2(str1, 1, 5); /* ... */ str2.assign(str1, 1, 5); | Не всё в этом мире делается через оператор присваивания, и далеко не всегда нужны подстроки.
---------- Одни с годами умнеют, другие становятся старше. |
| Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 22:47 23-01-2007 | Исправлено: Qraizer, 22:51 23-01-2007 |
|