30 Input/output library [input.output]

30.6 Stream buffers [stream.buffers]

30.6.3 Class template basic_­streambuf [streambuf]

30.6.3.4 basic_­streambuf virtual functions [streambuf.virtuals]

30.6.3.4.5 Put area [streambuf.virt.put]

streamsize xsputn(const char_type* s, streamsize n);

Effects: Записывает до n символов в выходную последовательность, как если бы при повторных вызовах sputc(c). Записанные символы получаются из последовательных элементов массива, первый элемент которого обозначен знаком s. Запись останавливается, когда либо n символы были написаны, либоsputc(c) возвращался вызов traits​::​eof(). Не указано, вызывает ли функция, overflow() когда pptr() == epptr() становится, true или она достигает тех же результатов другими способами.

Returns: Количество написанных символов.

int_type overflow(int_type c = traits::eof());

Effects: Использует некоторую начальную подпоследовательность символов pending sequence. Ожидающая последовательность определяется как конкатенация

  • пустая последовательность, если pbase() не равна нулю, в противном случае pptr() - pbase() символы, начинающиеся с pbase(), за которыми следует

  • пустая последовательность, если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается true, в противном случае последовательность, состоящая из c.

Remarks: Функции-члены sputc() и sputn() вызывают эту функцию в случае, если в буфере размещения нет места, достаточного для размещения последовательности символов аргумента.

Requires: Каждое преобладающее определение этой виртуальной функции должно подчиняться следующим ограничениям:

  1. 1.Указывается влияние употребления символа на связанную выходную последовательность.303

  2. 2.Позвольте r быть количеством символов в ожидающей последовательности, которые не используются. Если неr равно нулю , то pbase() и pptr() должен быть установлен таким образом, чтобы: pptr() - pbase() == r а r символы , начинающиеся на pbase() это соответствующий выходной поток. В случае, если он r равен нулю (все символы ожидающей последовательности были израсходованы), то либо pbase() устанавливается nullptr, либо pbase() и pptr() оба установлены на одно и то же ненулевое значение.

  3. 3.Функция может завершиться ошибкой, если не удается добавить какой-либо символ в связанный выходной поток или если он не может быть установлен pbase() и в pptr() соответствии с вышеуказанными правилами.

Returns: traits​::​eof() или выдает исключение, если функция не работает.

В противном случае возвращает какое-либо значение, отличное от traits​::​eof() указания успеха.304

Default behavior: Возврат traits​::​eof().

То есть для каждого класса, производного от экземпляра basic_­streambuf в этом разделе ([stringbuf], [filebuf]), дается спецификация того, как потребление символа влияет на связанную выходную последовательность. Нет требований к программному классу.

Обычно overflow возвращается, c чтобы указать на успех, за исключением тех случаев, когда traits​::​eq_­int_­type(c, traits​::​eof()) возвращается true, и в этом случае он возвращается traits​::​not_­eof(c).