C++11 標準テンプレート (STL) (std::basic_istream) (10)

ヘッダー ファイル <istream> で定義
テンプレート<

    クラス CharT、
    クラス Traits = std::char_traits<CharT>

> クラス Basic_istream : virtual public std::basic_ios<CharT, Traits>

 クラス テンプレートbasic_istream文字ストリームに対する高レベルの入力サポートを提供します。サポートされている操作には、フォーマットされた入力 (整数値や空白で区切られた文字や文字列など) とフォーマットされていない入力 (生の文字や文字配列など) が含まれます。この機能は、基本クラスbasic_iosを介してアクセスされる基礎となるクラスbasic_streambufによって提供されるインターフェイスに実装されます。ほとんどのライブラリ実装には、basic_istream非継承データ メンバーが 1 つあります。これは、basic_istream::gcount() によって返される値を格納するために使用されます。

その他

基礎となるストレージデバイスと同期する

std::basic_istream<CharT,Traits>::sync

int sync();

入力バッファを関連するデータ ソースと同期します。

UnformattedInputFunctionとして動作しますが、 gcount() 構造には影響せず、sentry オブジェクトをチェックした後、

rdbuf() が null ポインタの場合、-1 が返されます。

それ以外の場合は、rdbuf()->pubsync() を呼び出します。関数が -1 を返した場合は、setstate(badbit) を呼び出して -1 を返します。それ以外の場合は 0 を返します。

パラメータ

(なし)

戻り値

成功した場合は 0、失敗した場合、またはストリームがこの操作をサポートしていない場合 (バッファリングなし) は -1 です。

知らせ

readsome() と同様、この関数がライブラリ提供のストリームに対して何かを行うかどうかは実装定義です。通常、その目的は、ストリーム バッファがフェッチ領域を最後に満たした後に、関連する入力シーケンスに加えられた可能性のある変更を次の読み取り操作で取得することです。これを行うには、sync()フェッチ領域を空にするか、再度領域を補充するか、何もしないかのいずれかです。注目すべき例外は Visual Studio で、この操作は標準入力ストリームで呼び出されたときに未処理の出力を破棄します。

電話の例

#include <iostream>
#include <fstream>

void file_abc()
{
    std::ofstream f("test.txt");
    f << "abc\n";
}

void file_123()
{
    std::ofstream f("test.txt");
    f << "123\n";
}

int main()
{
    file_abc(); // 文件现在含 "abc"
    std::ifstream f("test.txt");
    std::cout << "Reading from the file\n";
    char c;
    f >> c;
    std::cout << c;
    file_123(); // 文件现在含 "123"
    f >> c;
    std::cout << c;
    f >> c;
    std::cout << c << '\n';
    f.close();

    file_abc(); // 文件现在含 "abc"
    f.open("test.txt");
    std::cout << "Reading from the file, with sync()\n";
    f >> c;
    std::cout << c;
    file_123(); // 文件现在含 "123"
    f.sync();
    f >> c;
    std::cout << c;
    f >> c;
    std::cout << c << '\n';
}

出力

 

関連するバッファを除く交換ストリーム オブジェクト

std::basic_istream<CharT,Traits>::swap

保護されています:
void swap(basic_istream& rhs);

(C++11以降)

Basic_ios::swap(rhs) を呼び出して、rdbuf() を除く基本クラスのすべてのデータ メンバーを交換します。これにより、rhs*this と の間で gcount() カウンター値が交換されます。このスワップ関数は保護されています。これは、関連するストリーム バッファーを適切にスワップする方法を認識している、スワップ可能な入力ストリーム クラス std::basic_ifstream および std::basic_istringstream のスワップ関数によって呼び出されます。

パラメータ

右肩 - 交換する同じタイプの別の Basic_istream オブジェクト

 電話の例

#include <sstream>
#include <iostream>
#include <utility>

int main()
{
    std::istringstream s1("hello");
    std::istringstream s2("bye");

    s1.swap(s2); // OK : istringstream 拥有公开的 swap()
    std::swap(s1, s2); // OK :调用 s1.swap(s2)
//  std::cin.swap(s2); // 错误: swap 是受保护成员

    std::cout << s1.rdbuf();
}

出力

 

おすすめ

転載: blog.csdn.net/qq_40788199/article/details/131736228