непоследовательное поведение ‹iomanip›

У меня есть следующий код

cout << setfill('0') << setw(4) << hex << 100 << 100 << std::endl;

Результат:

006464

Если я хочу, чтобы каждое число шириной 4, я должен использовать

out << setfill('0') << setw(4) << hex << 100 << sew(4) << 100 << std::endl;

Но если я хочу напечатать каждое число с помощью hex и setfill('0'), мне нужно только один раз установить setfill('0') и std::hex.

С++ разрабатывает это специально? каково его намерение?


person zhihuifan    schedule 29.04.2015    source источник
comment
Некоторые манипуляторы вызывают постоянные изменения состояния потока, некоторые только для следующего вывода.   -  person Some programmer dude    schedule 29.04.2015
comment
setw применяется только к следующей операции. Все остальные манипуляторы являются постоянными.   -  person Kerrek SB    schedule 29.04.2015


Ответы (1)


Да это специально. Потоковые операции внутренне приправлены сбросами ширины поля, указанной стандартом. Я думаю, что нет хорошего ответа на вопрос, почему.

person Cheers and hth. - Alf    schedule 29.04.2015