Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему std::cout.setf(std::ios::showpos) и std::cout.flagsf(std::ios::showpos) работают не так, как std::showpos

Шизануки Онна Знаток (347), закрыт 1 год назад
Если std::cout.setf(std::ios::showpos) и std::cout.flagsf(std::ios::showpos), то формат меняется у всех чисел,

а если std::showpos, то только у чисел после showpos

Можно ли простым языком объяснить, что там во внутренней кухне?. Т.е.. в первом случае символы сначала в одном буфере, и обрабатывается формат. А во втором что?
Лучший ответ
Николай Веселуха Высший разум (360666) 1 год назад
std::cout.setf(std::ios::showpos) – это флаг форматированного потока вывода

std::showpos – это манипулятор форматированного потока вывода

Флаги – это логические переменные, которые можно включить или выключить.

Манипуляторы – это объекты, которые помещаются в поток и влияют на способ ввода-вывода данных.
Шизануки ОннаЗнаток (347) 1 год назад
спасибо.
А внутри как этот процесс, если не манипуляторы, а флаги? т.е., сначала включаются флаги, и потом в выходной поток?

а манипуляторы - включают флаг только если до них дошла очередь добавления в поток?
Николай Веселуха Высший разум (360666) Шизануки Онна, поведение у них разное, нужно смотреть спецификацию. Какие-то манипуляторы влияют только форматирование одного входного аргумента. И это правильно. Например, знак «+» перед числом уместен, а перед строкой ему делать нечего. У флагов есть недостаток. Они обладают приоритетом. Чтобы использовать флаг с меньшим приоритетом, иногда следует выключать флаг с наибольшим приоритетом, потому что часть флагов включены по умолчанию. Кроме того и там и там имеются схожие по назначению функции, но это уже другой вопрос.
Остальные ответы
Похожие вопросы