30 Input/output library [input.output]

30.5 Iostreams base classes [iostreams.base]

30.5.1 Header <ios> synopsis [ios.syn]

#include <iosfwd>   // see [iosfwd.syn]

namespace std {
  using streamoff  = implementation-defined;
  using streamsize = implementation-defined;
  template <class stateT> class fpos;

  class ios_base;
  template <class charT, class traits = char_traits<charT>>
    class basic_ios;

  // [std.ios.manip], manipulators
  ios_base& boolalpha  (ios_base& str);
  ios_base& noboolalpha(ios_base& str);

  ios_base& showbase   (ios_base& str);
  ios_base& noshowbase (ios_base& str);

  ios_base& showpoint  (ios_base& str);
  ios_base& noshowpoint(ios_base& str);

  ios_base& showpos    (ios_base& str);
  ios_base& noshowpos  (ios_base& str);

  ios_base& skipws     (ios_base& str);
  ios_base& noskipws   (ios_base& str);

  ios_base& uppercase  (ios_base& str);
  ios_base& nouppercase(ios_base& str);

  ios_base& unitbuf    (ios_base& str);
  ios_base& nounitbuf  (ios_base& str);

  // [adjustfield.manip], adjustfield
  ios_base& internal   (ios_base& str);
  ios_base& left       (ios_base& str);
  ios_base& right      (ios_base& str);

  // [basefield.manip], basefield
  ios_base& dec        (ios_base& str);
  ios_base& hex        (ios_base& str);
  ios_base& oct        (ios_base& str);

  // [floatfield.manip], floatfield
  ios_base& fixed      (ios_base& str);
  ios_base& scientific (ios_base& str);
  ios_base& hexfloat   (ios_base& str);
  ios_base& defaultfloat(ios_base& str);

  // [error.reporting], error reporting
  enum class io_errc {
    stream = 1
  };

  template <> struct is_error_code_enum<io_errc> : public true_type { };
  error_code make_error_code(io_errc e) noexcept;
  error_condition make_error_condition(io_errc e) noexcept;
  const error_category& iostream_category() noexcept;
}

30.5.2 Types [stream.types]

using streamoff = implementation-defined;

Тип streamoff является синонимом одного из основных целочисленных типов со знаком, достаточного размера для представления максимально возможного размера файла для операционной системы.290

using streamsize = implementation-defined;

Тип streamsize является синонимом одного из основных целочисленных типов со знаком. Он используется для представления количества символов, переданных в операции ввода-вывода, или размера буферов ввода-вывода.291

Обычно long long.

streamsize используется в большинстве мест , где ISO C будет использовать size_­t.streamsize Можно использовать в большинстве size_­tслучаев, за исключением strstreambuf конструкторов, требующих отрицательных значений. Вероятно, это должен быть подписанный тип, соответствующий size_­t (что и вызывает Posix.2 ssize_­t).

30.5.3 Class ios_­base [ios.base]

namespace std {
  class ios_base {
  public:
    class failure; // see below

    // [ios::fmtflags], fmtflags
    using fmtflags = T1;
    static constexpr fmtflags boolalpha = unspecified;
    static constexpr fmtflags dec = unspecified;
    static constexpr fmtflags fixed = unspecified;
    static constexpr fmtflags hex = unspecified;
    static constexpr fmtflags internal = unspecified;
    static constexpr fmtflags left = unspecified;
    static constexpr fmtflags oct = unspecified;
    static constexpr fmtflags right = unspecified;
    static constexpr fmtflags scientific = unspecified;
    static constexpr fmtflags showbase = unspecified;
    static constexpr fmtflags showpoint = unspecified;
    static constexpr fmtflags showpos = unspecified;
    static constexpr fmtflags skipws = unspecified;
    static constexpr fmtflags unitbuf = unspecified;
    static constexpr fmtflags uppercase = unspecified;
    static constexpr fmtflags adjustfield = see below;
    static constexpr fmtflags basefield = see below;
    static constexpr fmtflags floatfield = see below;

    // [ios::iostate], iostate
    using iostate = T2;
    static constexpr iostate badbit = unspecified;
    static constexpr iostate eofbit = unspecified;
    static constexpr iostate failbit = unspecified;
    static constexpr iostate goodbit = see below;

    // [ios::openmode], openmode
    using openmode = T3;
    static constexpr openmode app = unspecified;
    static constexpr openmode ate = unspecified;
    static constexpr openmode binary = unspecified;
    static constexpr openmode in = unspecified;
    static constexpr openmode out = unspecified;
    static constexpr openmode trunc = unspecified;

    // [ios::seekdir], seekdir
    using seekdir = T4;
    static constexpr seekdir beg = unspecified;
    static constexpr seekdir cur = unspecified;
    static constexpr seekdir end = unspecified;

    class Init;

    // [fmtflags.state], fmtflags state
    fmtflags flags() const;
    fmtflags flags(fmtflags fmtfl);
    fmtflags setf(fmtflags fmtfl);
    fmtflags setf(fmtflags fmtfl, fmtflags mask);
    void unsetf(fmtflags mask);

    streamsize precision() const;
    streamsize precision(streamsize prec);
    streamsize width() const;
    streamsize width(streamsize wide);

    // [ios.base.locales], locales
    locale imbue(const locale& loc);
    locale getloc() const;

    // [ios.base.storage], storage
    static int xalloc();
    long&  iword(int index);
    void*& pword(int index);

    // destructor:
    virtual ~ios_base();

    // [ios.base.callback], callbacks;
    enum event { erase_event, imbue_event, copyfmt_event };
    using event_callback = void (*)(event, ios_base&, int index);
    void register_callback(event_callback fn, int index);

    ios_base(const ios_base&) = delete;
    ios_base& operator=(const ios_base&) = delete;

    static bool sync_with_stdio(bool sync = true);

  protected:
    ios_base();

  private:
    static int index;  // exposition only
    long*  iarray;     // exposition only
    void** parray;     // exposition only
  };
}

ios_­base определяет несколько типов членов:

  • тип failure, определяемый либо как производный класс, system_­error либо как синоним класса, производного от system_­error;

  • класс Init;

  • три типа Bitmask, fmtflags, iostate, и openmode;

  • перечислимого типа, seekdir.

Он поддерживает несколько типов данных:

  • информация о состоянии, отражающая целостность буфера потока;

  • управляющая информация, которая влияет на то, как интерпретировать (форматировать) входные последовательности и как генерировать (форматировать) выходные последовательности;

  • дополнительная информация, которая хранится программой для личного пользования.

[ Note: Для демонстрации поддерживаемые данные представлены здесь как:

  • static int index, определяет следующий доступный уникальный индекс для массивов целых чисел или указателей, поддерживаемых для частного использования программой, инициализированных неопределенным значением;

  • long* iarray, указывает на первый элементlong массива произвольной длины, предназначенного для частного использования программой;

  • void** parray, указывает на первый элемент массива указателей произвольной длины, предназначенного для частного использования программой.

end note]

30.5.3.1 Types [ios.types]

30.5.3.1.1 Class ios_­base​::​failure [ios::failure]

namespace std {
  class ios_base::failure : public system_error {
  public:
    explicit failure(const string& msg, const error_code& ec = io_errc::stream);
    explicit failure(const char* msg, const error_code& ec = io_errc::stream);
  };
}

Реализацию разрешено определять ios_­base​::​failure как синоним класса с функциональностью, эквивалентной классу, ios_­base​::​failure показанному в этом подпункте. [ Note: Когда ios_­base​::​failure является синонимом другого типа, он должен предоставлять вложенный тип failureдля имитации имени внедренного класса. ] Класс определяет базовый класс для типов всех объектов, созданных как исключения функциями в библиотеке iostreams, чтобы сообщать об ошибках, обнаруженных во время операций с буфером потока.end notefailure

При ios_­base​::​failure создании исключений реализации должны предоставлять значения, ec которые определяют конкретную причину сбоя. [ Note: Ошибки, возникающие в операционной системе, обычно сообщаются как system_­category() ошибки со значением ошибки, равным номеру ошибки, сообщаемому операционной системой. Об ошибках, возникающих в библиотеке потоков, обычно сообщается как error_­code(io_­errc​::​stream, iostream_­category()). ] end note

explicit failure(const string& msg, const error_code& ec = io_errc::stream);

Effects: Создает объект класса failure , создавая базовый класс с помощью msg и ec.

explicit failure(const char* msg, const error_code& ec = io_errc::stream);

Effects: Создает объект класса failure , создавая базовый класс с помощью msg и ec.

30.5.3.1.2 Type ios_­base​::​fmtflags [ios::fmtflags]

using fmtflags = T1;

Тип fmtflags - это bitmask type. Установка его элементов имеет эффекты, указанные в Табл 107.

Таблица 107 - fmtflags эффекты
ЭлементЭффект (ы), если установлен
boolalpha вставить и извлечь bool тип в алфавитном формате
dec преобразует целочисленный ввод или генерирует целочисленный вывод в десятичной системе счисления
fixed генерировать вывод с плавающей запятой в нотации с фиксированной запятой
hex преобразует целочисленный ввод или генерирует целочисленный вывод в шестнадцатеричной системе счисления
internal добавляет символы заливки в обозначенную внутреннюю точку в определенном сгенерированном выводе или идентично, right если такая точка не обозначена
left добавляет символы заливки справа (конечные позиции) определенного сгенерированного вывода
oct преобразует целочисленный ввод или генерирует целочисленный вывод в восьмеричной системе счисления
right добавляет символы заполнения слева (начальные позиции) определенного сгенерированного вывода
scientific генерирует вывод с плавающей запятой в экспоненциальной нотации
showbase генерирует префикс, указывающий числовую основу сгенерированного целочисленного вывода
showpoint безоговорочно генерирует символ десятичной точки в сгенерированном выводе с плавающей запятой
showpos генерирует + знак в неотрицательном сгенерированном числовом выводе
skipws пропускает начальные пробелы перед определенными операциями ввода
unitbuf сбрасывает вывод после каждой операции вывода
uppercase заменяет определенные строчные буквы их эквивалентами в верхнем регистре в сгенерированном выводе

Тип fmtflags также определяет константы, указанные в Табл 108.

Таблица 108 - fmtflags константы
ПостоянныйДопустимые значения
adjustfield left | right | internal
basefield dec | oct | hex
floatfield scientific | fixed

30.5.3.1.3 Type ios_­base​::​iostate [ios::iostate]

using iostate = T2;

Типом iostate является a bitmask type , содержащий элементы, указанные в таблице 109.

Таблица 109 - iostate эффекты
ЭлементЭффект (ы), если установлен
badbit указывает на потерю целостности во входной или выходной последовательности (например, на неисправимую ошибку чтения из файла);
eofbit указывает, что операция ввода достигла конца входной последовательности;
failbit указывает, что операция ввода не смогла прочитать ожидаемые символы или что операция вывода не смогла сгенерировать желаемые символы.

Тип iostate также определяет константу:

  • goodbit, нулевое значение.

30.5.3.1.4 Type ios_­base​::​openmode [ios::openmode]

using openmode = T3;

Тип openmode - это bitmask type. Он содержит элементы, указанные в таблице 110.

Таблица 110 - openmode эффекты
ЭлементЭффект (ы), если установлен
app стремиться закончить перед каждой записью
ate открывать и стремиться к завершению сразу после открытия
binary выполнять ввод и вывод в двоичном режиме (в отличие от текстового режима)
in открыт для ввода
out открыт для вывода
trunc обрезать существующий поток при открытии

30.5.3.1.5 Type ios_­base​::​seekdir [ios::seekdir]

using seekdir = T4;

Тип seekdir - это объект enumerated type , содержащий элементы, указанные в таблице 111.

Таблица 111 - seekdir эффекты
ЭлементИмея в виду
beg запросить поиск (для последующего ввода или вывода) относительно начала потока
cur запросить поиск относительно текущей позиции в последовательности
end запросить поиск относительно текущего конца последовательности

30.5.3.1.6 Class ios_­base​::​Init [ios::Init]

namespace std {
  class ios_base::Init {
  public:
    Init();
    ~Init();
  private:
    static int init_cnt; // exposition only
  };
}

Класс Init описывает объект, конструкция которого обеспечивает создание восьми объектов, объявленных в <iostream> ([iostream.objects]), которые связывают буферы файловых потоков со стандартными потоками C, предусмотренными функциями, объявленными в <cstdio>.

Для демонстрации поддерживаемые данные представлены здесь как:

  • static int init_­cnt, подсчитывает количество вызовов конструктора и деструктора для класса Init, инициализированного нулем.

Init();

Effects: Создает объект класса Init. Формирует и инициализирует объекты cin, cout, cerr, clog, wcin, wcout, wcerr, и , wclog если они еще не были построены и инициализируется.

~Init();

Effects: Уничтожает объект класса Init. Если нет других экземпляров класса все еще существует, звонки cout.flush(), cerr.flush(), clog.flush(), wcout.flush(), wcerr.flush(), wclog.flush().

30.5.3.2 ios_­base state functions [fmtflags.state]

fmtflags flags() const;

Returns: Информация управления форматом как для ввода, так и для вывода.

fmtflags flags(fmtflags fmtfl);

Postconditions: fmtfl == flags().

Returns: Предыдущее значение flags().

fmtflags setf(fmtflags fmtfl);

Effects: Наборы fmtfl в flags().

Returns: Предыдущее значение flags().

fmtflags setf(fmtflags fmtfl, fmtflags mask);

Effects: Очищает mask в flags(), наборы fmtfl & mask в flags().

Returns: Предыдущее значение flags().

void unsetf(fmtflags mask);

Effects: Очищает mask в flags().

streamsize precision() const;

Returns: Точность, генерируемая при определенных выходных преобразованиях.

streamsize precision(streamsize prec);

Postconditions: prec == precision().

Returns: Предыдущее значение precision().

streamsize width() const;

Returns: Минимальная ширина поля (количество символов), генерируемая при определенных преобразованиях вывода.

streamsize width(streamsize wide);

Postconditions: wide == width().

Returns: Предыдущее значение width().

30.5.3.3 ios_­base functions [ios.base.locales]

locale imbue(const locale& loc);

Effects: Вызывает каждую зарегистрированную пару обратного вызова (fn, index) ([ios.base.callback]) (*fn)(imbue_­event, *this, index) в такой момент, когда вызов ios_­base​::​getloc() изнутри fn возвращает новое значение локали loc.

Returns: Предыдущее значение getloc().

Postconditions: loc == getloc().

locale getloc() const;

Returns: Если языковой стандарт не был добавлен, копия глобального языкового стандарта C ++ locale(), действующая на момент создания. В противном случае возвращает встроенный языковой стандарт, который будет использоваться для выполнения операций ввода и вывода, зависящих от языкового стандарта.

30.5.3.4 ios_­base static members [ios.members.static]

bool sync_with_stdio(bool sync = true);

Returns: true если предыдущее состояние standard iostream objects было синхронизировано, в противном случае возвращается false. При первом вызове функция возвращается true.

Effects: Если какая-либо операция ввода или вывода произошла с использованием стандартных потоков до вызова, эффект определяется реализацией. В противном случае, вызванный с false аргументом, он позволяет стандартным потокам работать независимо от стандартных потоков C.

Когда стандартный объект iostream str находится synchronized со стандартным потоком stdio f, эффект вставки символа с c помощью

fputc(f, c);

такой же, как эффект

str.rdbuf()->sputc(c);

для любых последовательностей символов; эффект извлечения персонажа с c помощью

c = fgetc(f);

такой же, как эффект

c = str.rdbuf()->sbumpc();

для любых последовательностей символов; и эффект отодвигая персонажа c по

ungetc(c, f);

такой же, как эффект

str.rdbuf()->sputbackc(c);

для любой последовательности символов.292

Это означает, что операции над стандартным объектом iostream могут произвольно сочетаться с операциями над соответствующим потоком stdio. На практике синхронизация обычно означает, что стандартный объект iostream и стандартный объект stdio совместно используют буфер.

30.5.3.5 ios_­base storage functions [ios.base.storage]

static int xalloc();

Returns: index ++.

Remarks: Одновременный доступ к этой функции нескольких потоков не должен приводить к возникновению файла data race.

long& iword(int idx);

Effects: Если iarray - нулевой указатель, выделяет массив long неопределенного размера и сохраняет указатель на его первый элемент в iarray. Затем функция расширяет массив, на который указывает, по iarray мере необходимости, чтобы включить элемент iarray[idx]. Каждый вновь выделенный элемент массива инициализируется нулем. Возвращенная ссылка недействительна после любых других операций с объектом.293 Однако значение указанного хранилища сохраняется, так что до следующего вызова copyfmtвызов iword с тем же индексом дает еще одну ссылку на то же значение. Если функция не работает294 и *this является подобъектом базового класса basic_­ios<> объекта или подобъекта, эффект эквивалентен вызову basic_­ios<>​::​setstate(badbit) производного объекта (который может вызвать ошибку failure).

Returns: Об успехе iarray[idx]. В случае сбоя действительный long& инициализируется значением 0.

void*& pword(int idx);

Effects: Если parray - нулевой указатель, выделяет массив указателей на void неопределенный размер и сохраняет указатель на свой первый элемент в parray. Затем функция расширяет массив, на который указывает, по parray мере необходимости, чтобы включить элемент parray[idx]. Каждый вновь выделенный элемент массива инициализируется нулевым указателем. Возвращенная ссылка недействительна после любых других операций с объектом. Однако значение указанного хранилища сохраняется, так что до следующего вызова copyfmtвызов pword с тем же индексом дает еще одну ссылку на то же значение. Если функция не работает295 и *this является подобъектом базового класса basic_­ios<> объекта или подобъекта, эффект эквивалентен вызову basic_­ios<>​::​setstate(badbit) производного объекта (который может вызвать ошибку failure).

Returns: Об успехе parray[idx]. В случае ошибки действительный void*& инициализируется значением 0.

Remarks: После последующего обращения к pword(int) тому же объекту более раннее возвращаемое значение может быть недействительным.

Реализация может реализовать как целочисленный массив, на который указывает, так iarray и массив указателей, на который указывает parray как разреженные структуры данных, возможно, с одноэлементным кешем для каждой.

например, потому что он не может выделить место.

например, потому что он не может выделить место.

30.5.3.6 ios_­base callbacks [ios.base.callback]

void register_callback(event_callback fn, int index);

Effects: Регистрирует пару (fn, index) таким образом, чтобы во время вызовов imbue() ([ios.base.locales]) copyfmt(), или ~ios_­base() ([ios.base.cons]) функция fn вызывалась с аргументом index. Зарегистрированные функции вызываются при возникновении события в порядке, обратном регистрации. Функции, зарегистрированные при активной функции обратного вызова, не вызываются до следующего события.

Requires: Функция fn не должна вызывать исключений.

Remarks: Идентичные пары не объединяются. Функция, зарегистрированная дважды, будет вызываться дважды.

30.5.3.7 ios_­base constructors/destructor [ios.base.cons]

ios_base();

Effects: ios_­base После построения каждый член имеет неопределенное значение. Члены объекта должны быть инициализированы вызовом basic_­ios​::​init перед первым использованием объекта или перед его уничтожением, в зависимости от того, что произойдет раньше; в противном случае поведение не определено.

~ios_base();

Effects: Уничтожает объект класса ios_­base. Вызывает каждую зарегистрированную пару обратного вызова (fn, index) ([ios.base.callback]) как (*fn)(​erase_­event, *this, index) в то время, когда любая ios_­base функция-член, вызываемая изнутри, fn имеет четко определенные результаты.

30.5.4 Class template fpos [fpos]

namespace std {
  template <class stateT> class fpos {
  public:
    // [fpos.members], members
    stateT state() const;
    void state(stateT);
  private;
    stateT st; // exposition only
  };
}

30.5.4.1 fpos members [fpos.members]

void state(stateT s);

Effects: Назначает s в st.

stateT state() const;

Returns: Текущее значение st.

30.5.4.2 fpos requirements [fpos.operations]

Разрешены операции, указанные в таблице 112 . В этой таблице

  • P относится к экземпляру fpos,

  • p и q обращайтесь к значениям типа P,

  • O относится к типу streamoff,

  • o относится к значению типа streamoff,

  • sz относится к значению типа streamsize и

  • i относится к значению типа int.

Таблица 112 - Требования к типу позиции
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
P(i) p == P(i)
примечание: предполагается деструктор.
P p(i);
P p = i;
Postconditions: p == P(i).
P(o) fpos конвертирует из offset
O(p) streamoff конвертируется в offset P(O(p)) == p
p == q конвертируемый в bool == является отношением эквивалентности
p != q конвертируемый в bool !(p == q)
q = p + o
p += o
fpos + компенсировать q - o == p
q = p - o
p -= o
fpos - компенсировать q + o == p
o = p - q streamoff расстояние q + o == p
streamsize(o)
O(sz)
streamsize
streamoff
обращает
новообращенных
streamsize(O(sz)) == sz
streamsize(O(sz)) == sz

[ Note: Каждая реализация должна предоставлять перегруженные операторы для fpos объектов, чтобы удовлетворить требованиям [fpos.operations]. Не указано, являются ли эти операторы членами fposглобальных операторов или предоставлены каким-либо другим образом. ]end note

Операции потока, возвращающие значение типа, traits​::​pos_­type возвращаются P(O(-1)) как недопустимое значение, чтобы сигнализировать об ошибке. Если это значение используется в качестве аргумента в любой istream, ostreamили streambuf члена , который принимает значение типа ,traits​::​pos_­type то поведение этой функции не определено.

30.5.5 Class template basic_­ios [ios]

30.5.5.1 Overview [ios.overview]

namespace std {
  template <class charT, class traits = char_traits<charT>>
  class basic_ios : public ios_base {
  public:
    using char_type   = charT;
    using int_type    = typename traits::int_type;
    using pos_type    = typename traits::pos_type;
    using off_type    = typename traits::off_type;
    using traits_type = traits;

    // [iostate.flags], flags functions
    explicit operator bool() const;
    bool operator!() const;
    iostate rdstate() const;
    void clear(iostate state = goodbit);
    void setstate(iostate state);
    bool good() const;
    bool eof()  const;
    bool fail() const;
    bool bad()  const;

    iostate exceptions() const;
    void exceptions(iostate except);

    // [basic.ios.cons], constructor/destructor
    explicit basic_ios(basic_streambuf<charT, traits>* sb);
    virtual ~basic_ios();

    // [basic.ios.members], members
    basic_ostream<charT, traits>* tie() const;
    basic_ostream<charT, traits>* tie(basic_ostream<charT, traits>* tiestr);

    basic_streambuf<charT, traits>* rdbuf() const;
    basic_streambuf<charT, traits>* rdbuf(basic_streambuf<charT, traits>* sb);

    basic_ios& copyfmt(const basic_ios& rhs);

    char_type fill() const;
    char_type fill(char_type ch);

    locale imbue(const locale& loc);

    char      narrow(char_type c, char dfault) const;
    char_type widen(char c) const;

    basic_ios(const basic_ios&) = delete;
    basic_ios& operator=(const basic_ios&) = delete;

  protected:
    basic_ios();
    void init(basic_streambuf<charT, traits>* sb);
    void move(basic_ios& rhs);
    void move(basic_ios&& rhs);
    void swap(basic_ios& rhs) noexcept;
    void set_rdbuf(basic_streambuf<charT, traits>* sb);

  };
}

30.5.5.2 basic_­ios constructors [basic.ios.cons]

explicit basic_ios(basic_streambuf<charT, traits>* sb);

Effects: Создает объект класса basic_­ios, присваивая начальные значения его объектам-членам путем вызова init(sb).

basic_ios();

Effects: Создает объект класса basic_­ios ([ios.base.cons]), оставляя его объекты-члены неинициализированными. Объект должен быть инициализирован вызовом basic_­ios​::​init до его первого использования или до его уничтожения, в зависимости от того, что произойдет раньше; в противном случае поведение не определено.

~basic_ios();

Remarks: Деструктор не разрушает rdbuf().

void init(basic_streambuf<charT, traits>* sb);

Postconditions: Постусловия этой функции указаны в таблице 113.

Таблица 113 - basic_­ios​::​init() эффекты
ЭлементЦенить
rdbuf() sb
tie() 0
rdstate() goodbit если sb не является нулевым указателем, в противном случае badbit.
exceptions() goodbit
flags() skipws | dec
width() 0
precision() 6
fill() widen(' ')
getloc() копия значения, возвращаемого locale()
iarray нулевой указатель
parray нулевой указатель

30.5.5.3 Member functions [basic.ios.members]

basic_ostream<charT, traits>* tie() const;

Returns: Выходная последовательность, которая tied должна (синхронизироваться) с последовательностью, управляемой буфером потока.

basic_ostream<charT, traits>* tie(basic_ostream<charT, traits>* tiestr);

Requires: Если tiestr не равно нулю, он tiestr не должен быть доступен при просмотре связанного списка связанных объектов потока, начиная с tiestr->tie().

Postconditions: tiestr == tie().

Returns: Предыдущее значение tie().

basic_streambuf<charT, traits>* rdbuf() const;

Returns: Указатель на streambuf связанный с потоком.

basic_streambuf<charT, traits>* rdbuf(basic_streambuf<charT, traits>* sb);

Postconditions: sb == rdbuf().

Effects: Звонки clear().

Returns: Предыдущее значение rdbuf().

locale imbue(const locale& loc);

Effects: Вызывает ios_­base​::​imbue(loc) ([ios.base.locales]), а если rdbuf() != 0 то rdbuf()->pubimbue(loc) ([streambuf.locales]).

Returns: Приоритетное значение ios_­base​::​imbue().

char narrow(char_type c, char dfault) const;

Returns: use_­facet<ctype<char_­type>>(getloc()).narrow(c, dfault)

char_type widen(char c) const;

Returns: use_­facet<ctype<char_­type>>(getloc()).widen(c)

char_type fill() const;

Returns: Символ, используемый для заполнения (заполнения) преобразования вывода до указанной ширины поля.

char_type fill(char_type fillch);

Postconditions: traits​::​eq(fillch, fill()).

Returns: Предыдущее значение fill().

basic_ios& copyfmt(const basic_ios& rhs);

Effects: Если (this == &rhs) ничего не делает. В противном случае присваивает объектам *this -членам соответствующих объектов-членов rhs следующим образом:

  1. 1.вызывает каждую зарегистрированную пару обратных вызовов (fn, index) как (*fn)(erase_­event, *this, index);

  2. 2.присваивается объектам *this -членам соответствующих объектов-членов rhs, за исключением того, что

    • rdstate(),, rdbuf()и exceptions() остаются без изменений;

    • копируется содержимое массивов, на которые указывает pword и iword , а не сами указатели;296 а также

    • если какие-либо вновь сохраненные значения указателя *this указывают на объекты, хранящиеся вне объекта, rhs и эти объекты уничтожаются при rhs уничтожении, вновь сохраненные значения указателя изменяются, чтобы указывать на вновь созданные копии объектов;

  3. 3.вызывает каждую пару обратных вызовов, скопированную из rhs as (*fn)(copyfmt_­event, *this, index);

  4. 4.звонки exceptions(rhs.exceptions()).

[ Note: Второй проход через пары обратного вызова позволяет pword обнулить скопированное значение, либо глубоко скопировать его референт, либо подсчитать ссылку, либо выполнить другие специальные действия. ]end note

Postconditions: Постусловия этой функции указаны в таблице 114.

Таблица 114 - basic_­ios​::​copyfmt() эффекты
ЭлементЦенить
rdbuf() unchanged
tie() rhs.tie()
rdstate() unchanged
exceptions() rhs.exceptions()
flags() rhs.flags()
width() rhs.width()
precision() rhs.precision()
fill() rhs.fill()
getloc() rhs.getloc()

Returns: *this.

void move(basic_ios& rhs); void move(basic_ios&& rhs);

Postconditions: *this должен иметь состояние, которое rhs было до вызова функции, за исключением тогоrdbuf() , что должен возвращать 0. rhs должен быть в допустимом, но неуказанном состоянии, за исключением того rhs.rdbuf() , что должен возвращать то же значение, что и перед вызовом функции, и rhs.tie() должен возвращать 0.

void swap(basic_ios& rhs) noexcept;

Effects: Состояниями *this и rhs необходимо поменять местами, за исключением того rdbuf() , что они должны возвращать то же значение, что и перед вызовом функции, и rhs.rdbuf() должны возвращать то же значение, что и перед вызовом функции.

void set_rdbuf(basic_streambuf<charT, traits>* sb);

Requires: sb != nullptr.

Effects: Связывает basic_­streambuf объект, на который указывает sb этот поток, без вызова clear().

Postconditions: rdbuf() == sb.

Throws: Ничего такого.

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

30.5.5.4 basic_­ios flags functions [iostate.flags]

explicit operator bool() const;

Returns: !fail().

bool operator!() const;

Returns: fail().

iostate rdstate() const;

Returns: Состояние ошибки буфера потока.

void clear(iostate state = goodbit);

Postconditions: Если rdbuf() != 0 тогда state == rdstate(); иначе rdstate() == (state | ios_­base​::​badbit).

Effects: Если ((state | (rdbuf() ? goodbit : badbit)) & exceptions()) == 0, вернется. В противном случае функция генерирует объект класса basic_­ios​::​failure, построенный со значениями аргументов, определяемыми реализацией.

void setstate(iostate state);

Effects: Звонки clear(rdstate() | state) (которые могут бросить basic_­ios​::​failure).

bool good() const;

Returns: rdstate() == 0

bool eof() const;

Returns: true если eofbit установлен в rdstate().

bool fail() const;

Returns: true если failbit или badbit установлен в rdstate().297

bool bad() const;

Returns: true если badbit установлен в rdstate().

iostate exceptions() const;

Returns: Маска, определяющая, какие элементы установлены в rdstate() вызове исключения.

void exceptions(iostate except);

Postconditions: except == exceptions().

Effects: Звонки clear(rdstate()).

Проверка badbit также на fail() историческую практику.

30.5.6 ios_­base manipulators [std.ios.manip]

30.5.6.1 fmtflags manipulators [fmtflags.manip]

ios_base& boolalpha(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​boolalpha).

Returns: str.

ios_base& noboolalpha(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​boolalpha).

Returns: str.

ios_base& showbase(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​showbase).

Returns: str.

ios_base& noshowbase(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​showbase).

Returns: str.

ios_base& showpoint(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​showpoint).

Returns: str.

ios_base& noshowpoint(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​showpoint).

Returns: str.

ios_base& showpos(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​showpos).

Returns: str.

ios_base& noshowpos(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​showpos).

Returns: str.

ios_base& skipws(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​skipws).

Returns: str.

ios_base& noskipws(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​skipws).

Returns: str.

ios_base& uppercase(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​uppercase).

Returns: str.

ios_base& nouppercase(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​uppercase).

Returns: str.

ios_base& unitbuf(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​unitbuf).

Returns: str.

ios_base& nounitbuf(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​unitbuf).

Returns: str.

30.5.6.2 adjustfield manipulators [adjustfield.manip]

ios_base& internal(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​internal, ios_­base​::​adjustfield).

Returns: str.

ios_base& left(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​left, ios_­base​::​adjustfield).

Returns: str.

ios_base& right(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​right, ios_­base​::​adjustfield).

Returns: str.

30.5.6.3 basefield manipulators [basefield.manip]

ios_base& dec(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​dec, ios_­base​::​basefield).

Returns: str298.

ios_base& hex(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​hex, ios_­base​::​basefield).

Returns: str.

ios_base& oct(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​oct, ios_­base​::​basefield).

Returns: str.

Сигнатура функции dec(ios_­base&) может быть вызвана сигнатурой функции, basic_­ostream& stream​::​operator<<(ios_­base& (*)(ios_­base&)) чтобы разрешить выражениям формы cout << dec изменять флаги формата, хранящиеся в cout.

30.5.6.4 floatfield manipulators [floatfield.manip]

ios_base& fixed(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​fixed, ios_­base​::​floatfield).

Returns: str.

ios_base& scientific(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​scientific, ios_­base​::​floatfield).

Returns: str.

ios_base& hexfloat(ios_base& str);

Effects: Звонки str.setf(ios_­base​::​fixed | ios_­base​::​scientific, ios_­base​::​floatfield).

Returns: str.

[ Note: Более очевидное использование ios_­base​::​hex для указания шестнадцатеричного формата с плавающей запятой изменило бы смысл существующих четко определенных программ. C ++ 2003 не придает значения комбинации fixed и scientific. ]end note

ios_base& defaultfloat(ios_base& str);

Effects: Звонки str.unsetf(ios_­base​::​floatfield).

Returns: str.

30.5.6.5 Error reporting [error.reporting]

error_code make_error_code(io_errc e) noexcept;

Returns: error_­code(static_­cast<int>(e), iostream_­category()).

error_condition make_error_condition(io_errc e) noexcept;

Returns: error_­condition(static_­cast<int>(e), iostream_­category()).

const error_category& iostream_category() noexcept;

Returns: Ссылка на объект типа, производного от класса error_­category.

Объектные default_­error_­condition и equivalent виртуальные функции должны вести себя, как указано для класса error_­category. name Виртуальная функция объекта должна возвращать указатель на строку "iostream".