| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Флаги формата и оператор :: |
| Автор: S.A.G. 4.6.2007, 18:56 | ||||||||
Для начала приведу цитату из Шилдта:
Выходит значения перечислимого типа fmtflags и есть флаги. Однако если объявить переменную типа fmtflags, она в любой момент времени будет содержать только одно значение из всех возможных. В классе ios должно быть такое объявление:
Существует функция-член этого же класса setf:
Она позволяет устанавливать флаги. Например, для установки флага showpos можно воспользоваться следующей инструкцией:
Здесь showpos представляет собой значение перечислимого типа. В зависимости от порядка следования в объявлении типа fmtflags эта константа будет иметь определенное значение целого типа. Если это и есть флаг то в чем состоит его установка? Что значит "установить флаг"? Если бы флаги представляли собой переменные булевого типа то никаких проблем с их пониманием бы не возникло. Непонятна также роль оператора ::. |
| Автор: vinter 4.6.2007, 19:03 | ||
уточнение области видимости да
|
| Автор: S.A.G. 4.6.2007, 19:15 |
| Отредактировал изначальный вопрос. vinter, ты сам себе противоречишь. Флаги это переменные? -> да; Где они объявлены? -> Эти маски объявлены в классе ios как данные перечислимого типа fmtflags; Выходит константы а не переменные. |
| Автор: vinter 4.6.2007, 19:59 |
согласен, но я думаю ты понял что я имел ввиду для меня это одно и тоже, правда если константа, то это константная переменная, но все равно переменная |
| Автор: S.A.G. 4.6.2007, 20:57 |
| Rockie, об установке битов я знаю. Я знаю что если бит равен 0 то он сброшен а если 1 то установлен.. Для меня тут непонятно другое. Если перечислимые константы тут и есть флаги то как они устанавливаються? Разве можно изменить значение константы? В функцию передается значение этой константы (флага). Что потом происходит с этим значением? В любом случае неважно как оно используется, используется значение! |
| Автор: bsa 4.6.2007, 21:05 | ||||
блин. проще на примере:
|
| Автор: Fazil6 4.6.2007, 21:14 | ||
Значения флагов константы. При установке эти значения запоминаются в объекте. Что тут непонятного? |
| Автор: S.A.G. 4.6.2007, 21:20 | ||||
Флаги это значения перечислимого типа fmtflags. Как они устанавливаются? bsa, что такое out и app? |
| Автор: Fazil6 4.6.2007, 21:23 | ||
никак. Сами по себе они такого типа, а внутри объекта они сохраняются в обычную переменную |
| Автор: bsa 4.6.2007, 21:26 | ||||
Детский сад. Пример, как это сделано:
|
| Автор: Fazil6 4.6.2007, 21:36 |
это и есть флаги |
| Автор: S.A.G. 4.6.2007, 21:45 | ||||||||
Комментарии про детсад оставьте для ваших коллег по саду. out и app это константы перечислимого типа, спасибо. :: тут используется для того чтобы можно было их использовать. . тут не прокатывает так как out и app не переменные. С :: ясно. Добавлено через 9 минут и 28 секунд
Сами флаги суть константы целого типа. В какую переменную сохраняются? Меня интересуют системные флаги формата а не отфонарные. |
| Автор: nickless 4.6.2007, 23:07 | ||||||
Хочешь посмотреть как оно сделано? STL опенсурсная - открой да посмотри. Из bits/ios_base.h
T.e. комбинации флагов хранятся в том же enum-е. А в fstream-ах есть аттрибут типа basic_filebuf с аттрибутом
|
| Автор: Fazil6 4.6.2007, 23:27 | ||
мда... Теория. Есть некая переменная в обекте. Флаги для объекта - это биты этой переменной. ios::showpos - это битовая маска, позволяющая установить определенные биты и setf просто применяет побитовую операцию с этой маской и в результате выставляются определенные биты. |
| Автор: S.A.G. 4.6.2007, 23:58 |
| Таааак. Значения перечислимого типа это не флаги а по сути дела вспомагательные константы с еденичками в определенных разрядах. А теперь финальный вопрос будет такой: как наз. переменная в которой все это дело комбинируется? Выходит система каждый раз проверяет состояние битов в этой переменной прежде чем осуществить ввод/вывод в конкретный поток для которого установлены эти флаги. А если установить противоречивые флаги? Например сначала левое а потом правое выравнивание? Левое збросится после установки правого? И спасибо всем за помощь не смотря на то как она оказывалась. |
| Автор: Xenon 5.6.2007, 00:12 |
| Может для этого удобнее использовать bitset? |
| Автор: S.A.G. 5.6.2007, 13:02 |
| И в чем отрицательные эмоции? Я сделал неправильные выводы? Поправьте меня. |