Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: sputbackc

From cppreference.net
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> の公開メンバ関数)