public member function
<locale>

std::money_get::get

numerical (1)
iter_type get (iter_type s, iter_type end, bool intl, ios_base& str,               ios_base::iostate& err, long double& units) const;
string (2)
iter_type get (iter_type s, iter_type end, bool intl, ios_base& str,               ios_base::iostate& err, string_type& digits) const;
读取货币表达式
解析 send 之间的字符序列作为货币表达式,并将其存储到 unitsdigits 中。

该函数会读取字符,直到读取的字符不再是有效序列的一部分,或者 end 被到达。函数返回的迭代器将指向最后处理的字符之后的字符。

如果成功,第一个版本(1)会将对货币表达式的解释后的浮点值存储到 units 中。第二个版本(2)会将提取的数字作为 basic_string 对象存储到 digits 中。

如果需要,该函数会更新 err 的错误状态。
err 中的值描述
不变成功(未到达 end)。
failbit失败:序列未匹配预期的格式
eofbit操作期间到达了 end(这可能发生在成功或失败的情况下)。

在内部,该函数只是调用了虚保护成员函数 do_get,该函数默认情况下会解析货币表达式,并考虑 str格式标志。该函数使用 str 中选定的区域设置来获取格式详细信息(通过 moneypunct<char_type,intl> facet)以及映射字符(通过 ctype<char_type> facet)。

参数

s, end
指向序列开始和结束字符的迭代器。使用的范围是 [s,end),其中包含 send 之间的所有字符,包括 s 指向的字符,但不包括 end 指向的字符。
成员类型 iter_type 是 facet 的迭代器类型(定义为 money_get 的第二个模板参数 InputIterator 的别名)。默认情况下,这是 istreambuf_iterator,允许从 basic_istream 对象进行隐式转换。
intl
true 表示国际表示,否则为 false
这用于选择 moneypunct 的正确实例化。
str
派生自 ios_base 的类对象(通常是输入流对象)。它仅用于获取格式信息。
err
流错误状态对象,类型为 ios_base::iostate,错误状态在设置时存储在此处。
units
该函数将读取的货币表达式的浮点值等效值存储在此变量中。
digits
该函数会将成功提取的数字(仅数字,不包含标点符号)存储在此变量中,类型为string
成员类型 string_typebasic_string 的一个实例化,其字符类型与 facet 相同(定义为 basic_string<charT> 的别名,其中 charTmoney_get 的第一个模板参数)。

返回值

提取操作结束位置之后的下一个字符。
成员类型 iter_type 是 facet 的迭代器类型(定义为 money_get 的第二个模板参数 InputIterator 的别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// money_get example
#include <iostream>       // std::cin, std::cout, std::ios
#include <locale>         // std::locale, std::money_get, std::use_facet

int main ()
{
  std::locale loc("");    // default locale
  std::ios::iostate state;
  long double price;

  std::cout << "Please, enter the price: ";
  std::use_facet<std::money_get<char> >(loc).get
    (std::cin, std::money_get<char>::iter_type(), false, std::cin, state, price);

  if ((state & std::ios::failbit)==std::ios::failbit)
    std::cout << "ERROR: failed to read price\n";
  else
    std::cout << "The price of three items is " << (price*3.0) << '\n';

  return 0;
}

可能的输出

Please, enter the price: $12.95
ERROR: failed to read price

默认区域设置无法解释输入的价位的格式。

数据竞争

访问该对象以及 send 之间的整个范围。
参数 strerrunits/digits 可能会被修改。

异常安全

如果抛出异常,则“facet 对象”不会发生更改,尽管某些参数可能已被修改。

另见