public member function
<locale>

std::num_get::get

bool (1)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, bool& val) const;
long (2)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, long& val) const;
unsigned short (3)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned short& val) const;
unsigned int (4)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned int& val) const;
unsigned long (5)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned long& val) const;
float (6)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, float& val) const;
double (7)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, double& val) const;
long double (8)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, long double& val) const;
pointer (9)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, void*& val) const;
bool (1)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, bool& val) const;
long (2)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, long& val) const;
unsigned short (3)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned short& val) const;
unsigned int (4)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned int& val) const;
unsigned long (5)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned long& val) const;
float (6)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, float& val) const;
double (7)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, double& val) const;
long double (8)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, long double& val) const;
pointer (9)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, void*& val) const;
long long (10)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, long long& val) const;
unsigned long long (11)
iter_type get (iter_type in, iter_type end, ios_base& str,               ios_base::iostate& err, unsigned long long& val) const;
Get numeric value
解析 inend 之间的字符序列作为数值,并将其存储到 v 中。为此,它使用 str 中选择的格式选项(通过其 ios_base::fmtflags 值),并在必要时使用错误状态更新 err

该函数在序列中的一个字符不能构成有效的数值表达式(或到达 end)时停止读取字符。序列中的下一个字符由函数返回的迭代器指向。

一个 ios_base::iostate 位掩码值存储在 err 中,表示操作的结果。
err 中的值value in val描述
goodbitthe value read成功(未到达 end)。
failbitunspecified失败:字符序列不符合预期格式。
eofbitone of the above操作期间到达了 end(无论成功还是失败)。
err 中的值value in val描述
unchangedthe value read成功(未到达 end)。
failbit序列不符合预期格式。
numeric_limits::max()序列表示的值对于 val 的类型来说过大。
numeric_limits::lowest()序列表示的负值对于 val 的类型来说过大。
eofbitone of the above操作期间到达了 end(无论成功还是失败)。

该函数在内部调用虚保护成员 do_get,该成员默认解析数值,其格式与 scanf 解析 val 参数类型对应的*格式说明符*的格式相同,同时考虑 str 的*格式标志*。该函数使用 str 中选定的区域设置(通过 numpunct 构面)获取格式详细信息,并使用 ctype::widen 来扩展字符。

参数

in, end
指向序列开始和结束字符的迭代器。使用的范围是 [in,end),它包含 inend 之间的所有字符,包括 in 指向的字符,但不包括 end 指向的字符。
成员类型 iter_type 是构面的迭代器类型(定义为 num_get 的第二个模板参数 InputIterator 的别名)。默认情况下,它是一个 istreambuf_iterator,允许从 basic_istream 对象隐式转换。
str
派生自 ios_base 的类对象(通常是输入流对象)。它仅用于获取格式信息。
err
流错误状态对象,类型为 ios_base::iostate,结果状态存储在此对象中。
val
数值类型的元素。
如果函数成功提取了数字(即 errfailbit 标志未设置),则将值存储在此处。

返回值

提取操作结束后的序列中的下一个字符。
成员类型 iter_type 是构面的迭代器类型(定义为 num_get 的第二个模板参数 InputIterator 的别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// num_get example
#include <iostream>       // std::cin, std::cout, std::ios
#include <locale>         // std::locale, std::num_get, std::use_facet
#include <iterator>       // std::istreambuf_iterator
#include <string>         // std::string

int main ()
{
  std::locale loc;
  std::ios::iostate state;
  float mypi,yourpi;

  std::string number ("3.14159");
  // get from string:
  std::use_facet<std::num_get<char,std::string::iterator> > (loc).get
    (number.begin(), number.end(), std::cin, state, mypi);

  std::cout << "Please, enter PI: ";
  // get from istream:
  std::use_facet<std::num_get<char> >(loc).get
    (std::cin, std::istreambuf_iterator<char>(), std::cin, state, yourpi);

  if ( (mypi-yourpi>0.01) || (mypi-yourpi<-0.01) )
    std::cout << "Wrong!\n";
  else
    std::cout << "Right!\n";

  return 0;
}

可能的输出

Please, enter PI: 3.14
Right!


数据竞争

对象以及 inend 之间的整个范围都会被访问。
strerrval 参数可能会被修改。

异常安全

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

另见