std::ios_base:: iword
|
long
&
iword
(
int
index
)
;
|
||
Сначала выделяет или изменяет размер приватного хранилища (динамического массива long или другой индексируемой структуры данных) достаточно, чтобы сделать index допустимым индексом, затем возвращает ссылку на long элемент приватного хранилища с индексом index .
Ссылка может стать недействительной при любой операции с этим объектом
ios_base
, включая другой вызов
iword()
, но сохраненные значения сохраняются, так что последующее чтение из
iword
(
index
)
с тем же индексом будет возвращать то же значение до следующего вызова
std::basic_ios::copyfmt()
. Значение может использоваться для любых целей. Индекс элемента должен быть получен предыдущим вызовом
xalloc()
, иначе поведение не определено. Новые элементы инициализируются значением
0
.
Если функция завершается неудачно (возможно, из-за ошибки выделения памяти) и
*
this
является базовым подобъектом объекта
basic_ios<>
или подобъекта, вызывает
std::
basic_ios
<>
::
setstate
(
badbit
)
, что может вызвать исключение
std::ios_base::failure
.
Содержание |
Примечания
Типичное использование хранилища iword — это передача информации (например, пользовательских флагов форматирования) от пользовательских манипуляторов ввода-вывода к пользовательским
operator<<
и
operator>>
или к пользовательским фасетам форматирования, внедренным в стандартные потоки.
Параметры
| индекс | - | значение индекса элемента |
Возвращаемое значение
Ссылка на элемент.
Исключения
Может выбросить std::ios_base::failure при установке badbit.
Пример
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Выделяет хранилище iword для использования с объектами Foo int Foo::foo_xalloc = std::ios_base::xalloc(); // Этот пользовательский operator<< выводит строку в обратном порядке, если iword содержит 1 std::ostream& operator<<(std::ostream& os, Foo& f) { if (os.iword(Foo::foo_xalloc) == 1) return os << std::string(f.data.rbegin(), f.data.rend()); else return os << f.data; } // Этот манипулятор ввода-вывода переключает число, хранящееся в iword, между 0 и 1 std::ios_base& rev(std::ios_base& os) { os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc); return os; } int main() { Foo f("example"); std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n'; }
Вывод:
example elpmaxe example
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 36 | C++98 |
сохраненное значение может не сохраняться,
если ссылка становится недействительной |
сохраненное значение сохраняется
до следующего вызова
copyfmt()
|
| LWG 41 | C++98 |
функция самостоятельно устанавливает badbit при ошибке,
но
ios_base
не предоставляет такой интерфейс
|
badbit устанавливается
basic_ios
(если * this является его базовым подобъектом) |
Смотрите также
|
изменяет размер приватного хранилища при необходимости и предоставляет доступ к
void
*
элементу по заданному индексу
(публичная функция-член) |
|
|
[static]
|
возвращает уникальное для всей программы целое число, которое безопасно использовать в качестве индекса для
pword()
и
iword()
(публичная статическая функция-член) |