2016-10-31 6 views
0

Определяет ли стандарт, какие манипуляторы iomanip липкие, а какие нет?Есть ли официальный ресурс для липких манипуляторов

Я продолжаю очутившись в виду: https://stackoverflow.com/a/1533222/2642059

Which, это отличный ответ, но даже говорит:

на моей версии

Это в сочетании с тем, что я не могу найти концепцию sticky на http://en.cppreference.com или http://www.cplusplus.com заставляет меня задаться вопросом, является ли это концепцией, определенной для реализации.

+1

Все они липкие, за исключением 'setw', на которые распространяется требование, чтобы стандартные операторы вызывали' width (0) 'в конце своих операций. –

+2

@ downvoters Могу ли я получить причину для downvote? Что-то не так с этим вопросом (кроме обязательного downvoting для вопросов, помеченных C++?) –

ответ

2

не «официальный», но cppreference.com говорит, в std::setw

свойство ширины потока будет сброшено до нуля (что означает «не определено»), если любой из следующих функций называются:

В истории редактирования в cppreference says, этот список был составлен с помощью стандартного черновика для «width»

Все остальные манипуляторы «липкие», как и в случае, изменения состояния потока, которые они выполняют, сохраняются до тех пор, пока явно не будут изменены снова.

2

В стандартной библиотеке C++ на самом деле нет понятия липких/нелипких манипуляторов. Единственным нелипким манипулятором в стандартной библиотеке C++ является width(). Ни один из других стандартных флагов форматирования не изменяется как часть ввода или вывода. Какие пользовательские операторы делают и перезагружают ли настройки после использования, полностью зависит от них.

+0

Есть ли какая-нибудь документация, предупреждающая о том, что 'setw' топает, тогда как другие манипуляторы не имеют предупреждения? Похоже, что отсутствие предупреждения обо всех модификаторах может быть хорошей основой для официального заявления? –

+1

@JonathanMee: как Бо упомянул в комментарии, стандартные операторы библиотеки, влияющие на 'width()', стараются указать, что они называют 'width (0)'. В этом нет никакого предупреждения. Всего около полудюймов или около того места разбросаны по стандарту, где вызывается 'width (0)' (я нашел 8 мест, разбросанных по строкам, локалям и главам IOStreams). –

+1

@JonathanMee cppreference пытается перечислить все топание ширины на http://en.cppreference.com/w/cpp/io/manip/setw – Cubbi

Смежные вопросы