C++ streambuf::underflow() 函式



C++ 的 std::streambuf::underflow() 函式在輸入序列耗盡時被呼叫,這意味著沒有更多字元可供讀取。它嘗試在不推進當前位置的情況下將字元重新提取到緩衝區中,以便進行輸入操作。

預設情況下,underflow() 函式返回 traits_type::eof() 以指示失敗。

語法

以下是 std::streambuf::underflow() 函式的語法。

int underflow();

引數

它不接受任何引數。

返回值

如果可用,它返回當前 get 指標位置 (gptr) 處的字元。否則,它返回檔案結束值。

異常

如果丟擲異常,則物件處於有效狀態。

資料競爭

它訪問 basic_stringbuf 物件。

示例 1

讓我們看下面的例子,我們將檢查空緩衝區的 underflow。

#include <iostream>
#include <streambuf>
class a: public std::streambuf {
   protected: int_type underflow() override {
      return traits_type::eof();
   }
};
int main() {
   a buf;
   std::istream input( & buf);
   char x;
   if (!input.get(x)) {
      std::cout << "underflow Detected.\n";
   }
}

輸出

以上程式碼的輸出如下:

underflow Detected.

示例 2

考慮下面的例子,我們將透過在 underflow() 函式中重置 get 指標來重用緩衝區。

#include <iostream>
#include <streambuf>
class x: public std::streambuf {
   char data[10] = "WELCOME ";
   protected:
      int_type underflow() override {
         if (gptr() == egptr()) {
            setg(data, data, data + 9);
         }
         return traits_type::to_int_type( * gptr());
      }
};
int main() {
   x y;
   std::istream input( & y);
   for (int a = 0; a < 18; ++a) {
      char c;
      input.get(c);
      std::cout << c;
   }
}

輸出

以下是以上程式碼的輸出:

WELCOME .WELCOME .
streambuf.htm
廣告

© . All rights reserved.