basic_streambuf::seekoff, что должно быть возвращено, когда ios_base::in | ios_base::out указан?
27.6.3.4.2 Управление буфером и позиционирование
pos_type seekoff(off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out);
- Эффекты: изменяет позиции потока в одной или нескольких контролируемых последовательностях способом, который определяется отдельно для каждого класса, полученного из
basic_streambuf
в этом пункте (27.8.2.4, 27.9.1.5).- Поведение по умолчанию: Возвращает
pos_type(off_type(-1))
,
Все идет нормально. basic_streambuf
вывод, который я использую, может изменить свою позицию отдельно для ios_base::in
и / или ios_base::out
, Но что мне нужно вернуть, когда указаны оба?
Если вы укажете ios_base::in
или же ios_base::out
, мы бы вернули новую позицию потока определенной последовательности.
2 ответа
Это немного зависит от вашего потока, чтобы определить, что происходит. Встроенные потоки отличаются тем, что некоторые могут иметь отдельные позиции чтения и записи (stringstream), в то время как другие просто имеют одну (fstream).
Если пользователь делает репозицию и указывает оба входа и выхода, возможно, вам следует переместить оба. Если это поиск с нулевым смещением для получения текущей позиции, не исключено, что провал, если позиции различаются.
После поиска в 27.8.2.4 кажется, что вы потерпите неудачу.
Проверьте таблицу условий 130, в которой говорится, что обе входные и выходные последовательности должны быть расположены только в том случае
(which & (ios_base::in | ios_base::out)) == (ios_base::in) | ios_base::out))
and way == either ios_base::beg or ios_base::end