Форум программистов, компьютерный форум CyberForum.ru

Сбрасывается форматирование std::stringstream при очистке потока - C++

Восстановить пароль Регистрация
 
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,230
27.06.2014, 15:01     Сбрасывается форматирование std::stringstream при очистке потока #1
Имеем объект класса std::stringstream используемый для форматированного вывода. Перед очередным выводом производится очистка потока. После очистки все форматирование сбрасывается. Как бы узнать - нормально ли это? Borland C++ Builder 6 (если это влияет).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    std::stringstream ss;
    ss.width(2);
    ss.setf(std::ios::right, std::ios::adjustfield);
    ss.fill('0');
 
    ss << 1;
    std::string s = ss.str(); //01 - ok
 
    ss.str("");
    ss.clear();
 
    ss << 1;
    s = ss.str(); //1 - за что?! где мои ширина, выравнивание и символ заполнитель???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2014, 15:01     Сбрасывается форматирование std::stringstream при очистке потока
Посмотрите здесь:

C++ Проблемы с созданием потока stringstream
Считать с потока строку в std::wstring C++
как узнать размер std::stringstream C++
Ошибки при использовании stringstream C++
C++ std::stringstream precision
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.06.2014, 17:34     Сбрасывается форматирование std::stringstream при очистке потока #2
vxg, Сбрасывает не clear, а str(""). Что вцелом, логично, однако подтверждение стоит поискать в стандарте.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.06.2014, 21:55     Сбрасывается форматирование std::stringstream при очистке потока #3
Цитата Сообщение от vxg Посмотреть сообщение
Borland C++ Builder 6 (если это влияет).
Можно только посочувствовать.
Цитата Сообщение от vxg Посмотреть сообщение
После очистки все форматирование сбрасывается.
Не все. И не сбрасывается. Надо просто ширину задать по новой, т.к. она влияет только на следующее выводимое значение. О чем написано например тут:
Width of the next formatted element to insert.
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,230
30.06.2014, 09:47  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Сбрасывает не clear, а str(""). Что вцелом, логично, однако подтверждение стоит поискать в стандарте
к ужасу выяснено, что сбрасывает просто первый же вывод.
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно только посочувствовать.
ой, ай, вот если бы в других средах этого не было тогда "буэ" было бы уместно. среда озвучена не для "да он на велосипеде, ахаха", а для "да, в той версии компилятора есть отклонения" - чего как мы видим нет
Цитата Сообщение от Tulosba Посмотреть сообщение
О чем написано
в том то и дело что не нашел там такого. точнее это действительно написано в шапке, но, если я верно понимаю работу класса (откашливается и поправляет галстук), то такое поведение - маразм. зачем после каждого вывода сбрасывать ширину? я ведь задал ее не манипулятором. и если она каждый раз сбрасывается как ее задать на веки вечные? что бы она возвращалась при вызове width()?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 11:06     Сбрасывается форматирование std::stringstream при очистке потока #5
Цитата Сообщение от vxg Посмотреть сообщение
зачем после каждого вывода сбрасывать ширину?
Суть в том, что некоторые стандартные функции гарантированно вызывают width(0), поэтому установку ширины распространили только на ближайший аргумент, чтобы не было недоразумений.
Ответ нашел тут: http://stackoverflow.com/a/1533752/3240681
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,230
30.06.2014, 11:10  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #6
печально
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 11:52     Сбрасывается форматирование std::stringstream при очистке потока #7
Цитата Сообщение от vxg Посмотреть сообщение
печально
Ну, я думаю, не так страшно (сложно) добавить вызов width(N) перед каждым выводом.
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,230
30.06.2014, 12:58  [ТС]     Сбрасывается форматирование std::stringstream при очистке потока #8
просто предполагалось что человек настроит поток как ему надо работая непосредственно с потоком и все эти настройки будут применяться к выводу. а теперь придется все эти настройки выносить в поля обертки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока
Еще ссылки по теме:

C++ Выход за пределы массива при очистке памяти
C++ Как сделать std::stringstream
Ошибка при создании потока std::thread C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока #9
Цитата Сообщение от vxg Посмотреть сообщение
предполагалось что человек настроит поток как ему надо
Я бы тут наверное предложил создать (наследовать от стандартного) свой поток с блекджеком и шлюхами Но совсем недавно выяснил некоторые подробности, поэтому не буду уже такого предлагать со 100% уверенностью.
Yandex
Объявления
30.06.2014, 14:03     Сбрасывается форматирование std::stringstream при очистке потока
Ответ Создать тему
Опции темы

Текущее время: 22:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru