std::basic_streambuf<CharT,Traits>:: sputbackc
|
int_type sputbackc
(
char_type c
)
;
|
||
文字をゲットエリアに戻します。
get領域にputback位置が利用可能であり(
gptr
(
)
>
eback
(
)
)、かつ文字
c
が
gptr()
の1つ左の位置の文字と等しい場合(
Traits
::
eq
(
c, gptr
(
)
[
-
1
]
)
によって判定)、単に次のポインタ(
gptr()
)をデクリメントします。
それ以外の場合、 pbackfail ( Traits :: to_int_type ( c ) ) を呼び出し、get領域をバックアップするか、あるいはget領域と関連する文字シーケンスの両方を変更します。
I/Oストリーム関数 basic_istream::putback は、この関数を使用して実装されています。
目次 |
パラメータ
| c | - | 戻す文字 |
戻り値
プットバック位置が利用可能であった場合、次のポインタが現在指している文字を
int_type
に変換して返します(
Traits
::
to_int_type
(
*
gptr
(
)
)
を使用)。このストリームバッファからの次の単一文字入力はこの文字を返します。
putback位置が利用できない場合、 pbackfail() が返す値を返します。これは失敗時には Traits :: eof ( ) です。
例
#include <iostream> #include <sstream> int main() { std::stringstream s("abcdef"); // gptr()は"abcdef"の'a'を指す std::cout << "Before putback, string holds " << s.str() << '\n'; char c1 = s.get(); // c1 = 'a', gptr()は"abcdef"の'b'を指す char c2 = s.rdbuf()->sputbackc('z'); // s.putback('z')と同じ // gptr()は"zbcdef"の'z'を指す std::cout << "After putback, string holds " << s.str() << '\n'; char c3 = s.get(); // c3 = 'z', gptr()は"zbcdef"の'b'を指す char c4 = s.get(); // c4 = 'b', gptr()は"zbcdef"の'c'を指す std::cout << c1 << c2 << c3 << c4 << '\n'; s.rdbuf()->sputbackc('b'); // gptr()は"zbcdef"の'b'を指す s.rdbuf()->sputbackc('z'); // gptr()は"zbcdef"の'z'を指す int eof = s.rdbuf()->sputbackc('x'); // 戻すものがない: pbackfail()が失敗 if (eof == EOF) std::cout << "No room to putback after 'z'\n"; }
出力:
Before putback, string holds abcdef After putback, string holds zbcdef azzb No room to putback after 'z'
関連項目
|
入力シーケンスの次のポインタを1つ戻す
(公開メンバ関数) |
|
|
入力ストリームに文字を戻す
(
std::basic_istream<CharT,Traits>
の公開メンバ関数)
|