std::basic_istream<CharT,Traits>::seekg
From cppreference.com
< cpp | io | basic istream
| basic_istream& seekg( pos_type pos ); |
(1) | |
| basic_istream& seekg( off_type off, std::ios_base::seekdir dir ); |
(2) | |
現在の関連付けられているstreambufオブジェクトの入力位置指示子を設定します。
seekgは、まずeofbitをクリアします。 |
(C++11以降) |
seekgは、gcount()に影響しないことを除いて、UnformattedInputFunctionとして動作します。sentinelオブジェクトを構築してチェックした後、
1) fail() != true の場合、入力位置指示子を絶対値(ファイルの先頭からの相対)posに設定します。具体的には、rdbuf()->pubseekpos(pos, std::ios_base::in) を実行します(pubseekposは、具体的にはbasic_filebuf::seekpos、basic_stringbuf::seekpos、またはstrstreambuf::seekposなどの特定のバッファのseekposを呼び出します)。失敗した場合は、setstate(std::ios_base::failbit) を呼び出します。
2) fail() != true の場合、入力位置指示子をdirで定義された位置を基準とした相対位置offに設定します。具体的には、rdbuf()->pubseekoff(off, dir, std::ios_base::in) を実行します。失敗した場合は、setstate(std::ios_base::failbit) を呼び出します。
目次 |
[編集] パラメータ
| pos | - | 入力位置指示子を設定する絶対位置 | ||||||||
| off | - | 入力位置指示子を設定する相対位置(正または負) | ||||||||
| dir | - | 相対オフセットを適用する基準位置を定義します。次のいずれかの定数を使用できます。
|
[編集] 戻り値
*this
[編集] 例外
failure: エラーが発生した場合(エラー状態フラグが goodbit ではない)で、exceptions() がその状態に対してスローするように設定されている場合。内部操作が例外をスローした場合、それはキャッチされ、badbit が設定されます。exceptions() が badbit に対して設定されている場合、例外は再スローされます。
[編集] 注釈
seekg(n)は、必ずしもseekg(n, ios::beg)と同等ではありません。std::basic_ifstreamは、例えば、nという絶対位置をtellg()から取得する必要があることを要求します。
[編集] 例
このコードを実行
#include <iostream> #include <sstream> #include <string> int main() { std::string str = "Hello, world"; std::istringstream in(str); std::string word1, word2; in >> word1; in.seekg(0); // rewind in >> word2; std::cout << "word1 = " << word1 << '\n' << "word2 = " << word2 << '\n'; }
出力
word1 = Hello, word2 = Hello,
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 129 | C++98 | 失敗を示す方法がなかった | 失敗時にfailbitを設定する |
| LWG 136 | C++98 | seekgが出力ストリームを設定する可能性があった |
入力ストリームのみを設定する |
| LWG 537 | C++98 | offの型がoff_type&だった |
off_typeに修正された |
[編集] 関連項目
| 入力位置インジケータを返す (public member function) | |
| 出力位置インジケータを返す ( std::basic_ostream<CharT,Traits> の public メンバ関数) | |
| 出力位置インジケータを設定する ( std::basic_ostream<CharT,Traits> の public メンバ関数) | |
| seekpos() を呼び出す ( std::basic_streambuf<CharT,Traits> の public メンバ関数) | |
| [virtual] |
絶対アドレスを使用してファイル位置を再配置します (virtual protected member function of std::basic_filebuf<CharT,Traits>) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、絶対アドレス指定を使用して次のポインタを再配置する (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、絶対アドレス指定を使用して次のポインタを再配置する (virtual protected member function of std::strstreambuf) |
| seekoff() を呼び出す ( std::basic_streambuf<CharT,Traits> の public メンバ関数) | |
| [virtual] |
相対アドレスを使用してファイル位置を再配置します (virtual protected member function of std::basic_filebuf<CharT,Traits>) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、相対アドレス指定を使用して次のポインタを再配置する (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、相対アドレス指定を使用して次のポインタを再配置する (virtual protected member function of std::strstreambuf) |