public member function
<ostream> <iostream>

std::basic_ostream::tellp

pos_type tellp();
獲取輸出序列中的位置
返回輸出流中當前字元的位置。

在內部,如果成員 fail 返回 true,則函式返回 -1
否則,它返回 rdbuf()->pubseekoff(0,cur,out)
在內部,函式透過構造一個不進行評估的 sentry 物件來訪問輸出序列。然後,如果成員 fail 返回 true,則函式返回 -1
否則,它返回 rdbuf()->pubseekoff(0,cur,out)
最後,它在返回之前銷燬 sentry 物件。

請注意,即使在呼叫之前設定了 eofbit 標誌,該函式也能正常工作。

引數



返回值

流中的當前位置。
如果與流關聯的 *流緩衝區* 不支援該操作,或者操作失敗,則函式返回 -1
成員型別 pos_type 由 *字元特徵* 確定:通常,它是一個 fpos 型別(如 streampos),可以與整數型別進行轉換。

錯誤透過修改 *內部狀態標誌* 來通知
flagerror
eofbit-
failbit如果 sentry 的構造失敗,則可能設定此標誌。
badbit流錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
設定此標誌時,流的完整性可能受到影響。
一個操作可能設定多個標誌。

如果操作設定了已透過成員 exceptions 註冊的 *內部狀態標誌*,則函式將丟擲成員型別為 failure 的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// position in output stream
#include <fstream>      // std::ofstream

int main () {

  std::ofstream outfile;
  outfile.open ("test.txt");

  outfile.write ("This is an apple",16);
  long pos = outfile.tellp();
  outfile.seekp (pos-7);
  outfile.write (" sam",4);

  outfile.close();

  return 0;
}

在此示例中,tellp 用於獲取寫操作後流中的位置。然後,指標向前移動 7 個字元以在該位置修改檔案,因此檔案的最終內容為
This is a sample


資料競爭

修改流物件。
併發訪問同一個流物件可能導致資料爭用。

異常安全

基本保證:如果丟擲異常,物件處於有效狀態。
如果結果 *錯誤狀態標誌* 不是 goodbit 並且成員 exceptions 被設定為針對該狀態丟擲,則丟擲成員型別為 failure 的異常。
內部操作丟擲的任何異常都會被函式捕獲和處理,並設定 badbit。如果 badbit 在上次呼叫 exceptions 時被設定,則函式將重新丟擲捕獲的異常。

另見