Состояние формата ввода/вывода по умолчанию

90
21 марта 2022, 21:40

При копировании состояния формата ввода, обнаружил, что по умолчанию оно не нулевое. Решил провести тест: обнулить и смотреть что получается:

//обнуление всех флагов с сохранением старых
auto old_flags = cout.flags(0);
std::cout << "number of old flags cin/cout:  "
    << std::bitset<12>(old_flags).count()
    << "\nnumber of new flags: " << cout.flags();
//восстановление старых флагов
cout.setf(old_flags);

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

P.S. Последный вывод выдает ноль. Это подтверждение того, что ни один формат не установлен.

Вопрос: Какие же форматы установлены по умолчанию и как они влияют на состояние потока?

Answer 1
int main(int argc, const char * argv[])
{
    auto old_flags = cout.flags(0);
#define  fmt(x) cout << #x << ": " << (ios_base::x & old_flags) << endl
    fmt(dec);
    fmt(oct);
    fmt(hex);
    fmt(left);
    fmt(right);
    fmt(internal);
    fmt(scientific);
    fmt(fixed);
    fmt(floatfield);
    fmt(boolalpha);
    fmt(showbase);
    fmt(showpoint);
    fmt(showpos);
    fmt(skipws);
    fmt(unitbuf);
    fmt(uppercase);
}

Для Visual C++ 2017 дает ненулевые dec и skipws.

Для gcc, впрочем, то же самое: https://ideone.com/amWkcN

READ ALSO
Не работают вектора C++

Не работают вектора C++

Я работаю над 2D игрой на SFMl c++но думаю это не принципиально

79
Как добавить элементы в двусвязный список?

Как добавить элементы в двусвязный список?

Помогите пожалуйста дописать программуНужно написать процедуру, которая, получив в качестве параметра указатель на один из элементов двусвязного...

423
Двойное нажатие ЛКМ

Двойное нажатие ЛКМ

Я хочу сделать программу, которая при одном клике делает второй(нужно для копирования от 1 клика)Но,что я не пробовал, всё-равно выполняется...

86
Java. Прозрачность формы. @Override

Java. Прозрачность формы. @Override

Новый вопросЕсть появляющаяся форма (на ней элементы), задача сделать ее полупрозрачной

58