函式
<iomanip>

std::get_money

template <class moneyT>/*unspecified*/ get_money (moneyT& mon, bool intl = false);
獲取貨幣值
從其應用到的輸入流中提取字元,並將它們解釋為貨幣表示式,然後儲存在 mon 的值中。

在內部,該函式首先構造一個型別為 basic_istream::sentry 的物件(其中 noskipws 設定為 false)來訪問輸入序列。然後(如果 sentry 物件評估為 true),它呼叫 money_get::get(使用流的選定區域設定)來執行提取和解析操作,並相應地調整流的內部狀態標誌。最後,在返回之前銷燬 sentry 物件。

此操縱符在標頭檔案 <iomanip> 中宣告。

引數

mon
儲存貨幣值的物件。
moneyT 必須是 long doublebasic_string 的例項化。
intl
true 表示國際表示法,否則為 false
這在內部用於例項化正確的 moneypunct 類。

返回值

未指定。此函式只應作為流操縱符使用(見示例)。

錯誤透過修改流的內部狀態標誌來指示。
flag錯誤
eofbit輸入序列沒有更多可用字元(達到檔案結尾)。
failbit未提取任何字元,或者提取的字元無法解釋為有效的貨幣值。
badbit流錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
設定為此標誌時,流的完整性可能受到影響。
一次操作可能設定多個標誌。

如果操作在流上設定了一個使用其成員 exceptions 註冊的內部狀態標誌,則函式會丟擲型別為 ios_base::failure 的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// get_money manipulator example
#include <iostream>     // std::cin, std::cout
#include <iomanip>      // std::get_money

int main ()
{
  long double price;
  std::cout << "Please, enter the price: ";
  std::cin >> std::get_money(price);

  if (std::cin.fail()) std::cout << "Error reading price\n";
  else std::cout << "The price entered is: " << price << '\n';

  return 0;
}


資料競爭

修改 mon 以及從中提取的流物件。
併發訪問同一流物件可能導致資料競爭,但標準流物件 cinwcin與 stdio 同步時除外(在這種情況下,不會引發資料競爭,儘管對於提取的字元歸屬到執行緒的順序不提供任何保證)。

異常安全

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

另見