num_get::get

从字符序列提取数字或布尔值。

iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    bool& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    unsigned short& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    unsigned int& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    long& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    unsigned long& _Val
) const;
iter_type get(
    iter_type _First, 
    iter_type _Last,
    ios_base& _Iosbase, 
    ios_base::iostate& _State,
    long long& _Val
) const;
iter_type get(
    iter_type _First, 
    iter_type _Last,
    ios_base& _Iosbase, 
    ios_base::iostate& _State,
    unsigned long long& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    float& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    double& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    long double& _Val
) const;
iter_type get(
    iter_type _First,
    iter_type _Last,
    ios_base& _Iosbase,
    ios_base::iostate& _State,
    void *& _Val
) const;

参数

  • _First
    字符范围的开头的读取数字的。

  • _Last
    字符范围的末尾的读取数字的。

  • _Iosbase
    转换使用标志的 ios_base

  • _State
    failbit的状态(请参见 ios_base::iostate)添加在失败。

  • _Val
    读取的值。

返回值

迭代器,该值读取之后。

备注

所有成员函数返回 do_get(_First、_Last、_Iosbase、_State、_Val)。

第一个虚拟保护的成员函数尝试匹配启动时首先序列[_First,_Last)的时序组件,直到识别的完整,非空的整数输入字段。 如果成功,则会在 _Val将此字段转换为与之等效的值为类型 long 并存储结果。 它返回指定在数字输入字段之外的迭代器第一个元素。 否则,该功能在 _Val 不存储并在_State的 ios_base::failbit。 它返回指定在有效的整数输入字段的所有书名之外的迭代器第一个元素。 无论如何,则为;返回值等于 last,该函数将 _State的 ios_base::eofbit

整数输入字段中扫描函数使用的规则相同转换为与并将一系列 char 元素从文件。 每个这样 char 元素通过简单,一对一映射假定映射到类型 CharType 的一个对应的元素。 确定等效扫描转换规范如下所示:

  • 如果 iosbase标志 & ios_base::basefield == ios_base::十月,转换规范是 lo

  • 如果 iosbase.flags & ios_base::basefield == ios_base::十六进制,转换规范是 lx

  • 如果 iosbase.flags & ios_base::basefield == 0,转换规范是 li

  • 否则,将规范是 ld

区域设置方面进一步取决于整数输入字段的格式调用 use_facet <numpunct<Elem>返回的fac (iosbasegetloc)。 尤其是在下列情况下:

  • fac分组 确定num如何在任何左侧分组小数点。

  • facthousands_sep 确定在任何左侧分隔数字组小数点的序列。

如果 fac没有实例。thousands_sep 对数值输入字段时,不分组的约束)。 否则,所有分组的约束。fac)。grouping 是强制的,并移除分隔符,在扫描转换发生之前。

第二个虚拟保护的成员函数:

virtual iter_type do_get(iter_type _First, iter_type _Last,
    ios_base& _Iosbase, ios_base::iostate& _State,
        unsigned long& _Val) const;

的行为与第一个相同,不同之处在于,它将 lu替换 ld 的转换规范。 如果成功,则 _Val值的该转换数字输入字段转换为类型 unsigned long 的值和存储。

第三个虚拟保护的成员函数:

virtual iter_type do_get(iter_type _First, iter_type _Last,
    ios_base& _Iosbase, ios_base::iostate& _State,
        double& _Val) const;

的行为与第一个相同,不同之处在于,它尝试匹配完整,非空的浮点输入字段。 facdecimal_point 确定从部分数字分隔整数位数的序列。 等效扫描转换说明符是 lf

第四个虚保护的成员函数:

virtual iter_type do_get(iter_type _First, iter_type _Last,
    ios_base& _Iosbase, ios_base::iostate& _State,
        long double& _Val) const;

同样正常运行第三,除此之外,等效的扫描转换说明符是 Lf

第五个虚拟保护的成员函数:

virtual iter_type do_get(iter_type _First, iter_type _Last,
    ios_base& _Iosbase, ios_base::iostate& _State,
        void *& _Val) const;

相同的行为第一,除此之外,等效的扫描转换说明符是p。

第六个虚拟保护的成员函数:

virtual iter_type do_get(iter_type _First, iter_type _Last,
    ios_base& _Iosbase, ios_base::iostate& _State,
        bool& _Val) const;

的行为与第一个相同,不同之处在于,它尝试匹配完整,非空布尔输入字段。 如果成功在 _Val值的它会将布尔输入字段转换为类型 bool 的值和存储。

boolean输入字段采用两种形式之一。 如果 iosbaseflags & ios_base::boolalphafalse,这是尽可能为整数输入字段,除此之外,该转换的值必须是0 (对于 false)或1 (对于 true)。 否则,顺序必须与任何 facfalsename (对于 false),或者 factruename (对于 true)。

示例

// num_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
   locale loc( "german_germany" );

   basic_stringstream<char> psz, psz2;
   psz << "-1000,56";

   ios_base::iostate st = 0;
   long double fVal;
   cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;


   psz.imbue( loc );
   use_facet <num_get <char> >
   (loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
           basic_istream<char>::_Iter(0), psz, st, fVal );

   if ( st & ios_base::failbit )
      cout << "money_get( ) FAILED" << endl;
   else
      cout << "money_get( ) = " << fVal << endl;
}

Output

.
money_get( ) = -1000.56

要求

标头: <locale>

命名空间: std

请参见

参考

num_get Class