std::num_get::get, std::num_get::do_get

来自cppreference.com
< cpp‎ | locale‎ | num get

 
 
本地化库
语言环境方面
原文:
Locales and facets
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
locale
字符分类
原文:
Character classification
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
转换
原文:
Conversions
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
wstring_convert(C++11)
wbuffer_convert(C++11)
小面类的基类
原文:
Facet category base classes
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
小面类
原文:
Facet categories
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
特定于语言环境的方面
原文:
Locale-specific facets
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
代码转换方面
原文:
Code conversion facets
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
codecvt_utf8(C++11)
codecvt_utf16(C++11)
codecvt_utf8_utf16(C++11)
codecvt_mode(C++11)
C语言环境
原文:
C locale
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
 
std::num_get
成员函数
原文:
Member functions
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
num_get::num_get
num_get::~num_get
num_get::get
num_get::do_get
 
在头文件 <locale> 中定义
public:

iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, bool& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, long& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, long long& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, unsigned short& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, unsigned int& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, unsigned long& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, unsigned long long& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, float& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, double& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,
               std::ios_base::iostate& err, long double& v );
iter_type get( iter_type in, iter_type end, std::ios_base& str,

               std::ios_base::iostate& err, void*& v );
(1)
protected:

iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, bool& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, long& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, long long& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, unsigned short& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, unsigned int& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, unsigned long& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, unsigned long long& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, float& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, double& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,
                  std::ios_base::iostate& err, long double& v );
iter_type do_get( iter_type in, iter_type end, std::ios_base& str,

                  std::ios_base::iostate& err, void*& v );
(2)
1)
公共成员函数,调用最派生类的成员函数do_get.
原文:
public member function, calls the member function do_get of the most derived class.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
2)
读取字符,并生成从输入迭代器inv的类型的值,考虑到IO流格式化标志从str.flags(),字符分类规则std::use_facet<std::ctype<charT>>(str.getloc()),并从std::use_facet<std::numpunct<charT>>(str.getloc())​​数字标点字符。这个函数被调用所有格式的输入流的运营商,如std::cin >> n;.
原文:
reads characters from the input iterator in and generates the value of the type of v, taking into account IO stream formatting flags from str.flags(), character classification rules from std::use_facet<std::ctype<charT>>(str.getloc()), and numeric punctuation characters from std::use_facet<std::numpunct<charT>>(str.getloc()). This function is called by all formatted input stream operators such as std::cin >> n;.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
转换发生在三个阶段
原文:
Conversion occurs in three stages
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

目录

[编辑] 第1阶段:转换符的选择

  • I / O格式的标志,如果获得
    原文:
    I/O format flags are obtained, as if by
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
fmtflags basefield = (str.flags() & std::ios_base::basefield);
fmtflags boolalpha = (str.flags() & std::ios_base::boolalpha);
  • 如果类型的v是一个整数类型,第一个适用的选择:选择以下五个
    原文:
    If the type of v is an integer type, the the first applicable choice of the following five is selected:
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果basefield == oct,将使用转换符%o
原文:
If basefield == oct, will use conversion specifier %o
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果basefield == hex,将使用转换符%X
原文:
If basefield == hex, will use conversion specifier %X
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果basefield == 0,将使用转换符%i
原文:
If basefield == 0, will use conversion specifier %i
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果v签署,将使用转换符%d
原文:
If the type of v is signed, will use conversion specifier %d
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果是无符号的类型v,将使用转换符%u
原文:
If the type of v is unsigned, will use conversion specifier %u
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 对于整数类型,长度修饰符添加到转换规范,如果必要的:hshortunsigned shortllongunsigned longlllong longunsigned long long
    原文:
    For integer types, length modifier is added to the conversion specification if necessary: h for short and unsigned short, l for long and unsigned long, ll for long long and unsigned long long
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果vfloat,将使用转换符%g
    原文:
    If the type of v is float, will use conversion specifier %g
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果vdouble,将使用转换符%lg
    原文:
    If the type of v is double, will use conversion specifier %lg
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果vlong double,将使用转换符%Lg
    原文:
    If the type of v is long double, will use conversion specifier %Lg
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果vvoid*,将使用转换符%p
    原文:
    If the type of v is void*, will use conversion specifier %p
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果类型vboolboolalpha==0,犹如所得的类型vlong,除的值将被存储在第3阶段中的v.
    原文:
    If the type of v is bool and boolalpha==0, proceeds as if the type of v is long, except for the value to be stored in v in stage 3.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果类型vboolboolalpha!=0,下列取代:阶段2和3
    原文:
    If the type of v is bool and boolalpha!=0, the following replaces stages 2 and 3:
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 连续的字符输入迭代器instd::use_facet<std::numpunct<charT>>(str.getloc()).falsename()std::use_facet<std::numpunct<charT> >(str.getloc()).truename()只在必要时获得识别的唯一匹配的字符序列相匹配。输入迭代器in相比end只在必要时,得到一个字符.
    原文:
    * Successive characters obtained from the input iterator in are matched against the character sequences obtained from std::use_facet<std::numpunct<charT>>(str.getloc()).falsename() and std::use_facet<std::numpunct<charT> >(str.getloc()).truename() only as necessary as to identify the unique match. The input iterator in is compared to end only when necessary to obtain a character.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *如果靶序列是唯一匹配,v被设置为相应的bool值。否则false被存储在vstd::ios_base::failbit被分配给err。如果唯一的匹配找不到之前的输入端(in==end),err|=std::ios_base::eofbit执行.
    原文:
    * If the target sequence is uniquely matched, v is set to the corresponding bool value. Otherwise false is stored in v and std::ios_base::failbit is assigned to err. If unique match could not be found before the input ended (in==end), err|=std::ios_base::eofbit is executed.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 第2阶段:特征提取

  • 如果in==end,第2阶段被立即终止,没有多余的字符提取出来
    原文:
    If in==end, Stage 2 is terminated immediately, no further characters are extracted
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果由in的下一个字符提取char_type ct = *in;
    原文:
    The next character is extracted from in as if by char_type ct = *in;
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *如果字符相匹配的"0123456789abcdefxABCDEFX+-",扩大到语言环境的char_type,如果std::use_facet<std::ctype<charT>>(str.getloc()).widen(),它被转换为相应的char.
    原文:
    * If the character matches one of "0123456789abcdefxABCDEFX+-", widened to the locale's char_type as if by std::use_facet<std::ctype<charT>>(str.getloc()).widen(), it is converted to the corresponding char.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *如果字符匹配的小数点分隔符(std::use_facet<std::numpunct<charT>>(str.getloc()).decimal_point())),它被替换'.'.
    原文:
    * If the character matches the decimal point separator (std::use_facet<std::numpunct<charT>>(str.getloc()).decimal_point())), it is replaced by '.'.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *,如果字符相匹配的千位分隔符(std::use_facet<std::numpunct<charT>>(str.getloc()).thousands_sep())数以千计的分离是在所有std::use_facet<std::numpunct<charT>>(str.getloc()).grouping().length() != 0使用,然后,如果小数点'.'尚未积累,是rememebered的字符的位置,但的字符否则忽略。如果已经积累了小数点,该字符被丢弃,并结束第2阶段.
    原文:
    * If the character matches the thousands separator (std::use_facet<std::numpunct<charT>>(str.getloc()).thousands_sep()) and the thousands separation is in use at all std::use_facet<std::numpunct<charT>>(str.getloc()).grouping().length() != 0, then if the decimal point '.' has not yet been accumulated, the position of the character is rememebered, but the character is otherwise ignored. If the decimal point has already been accumulated, the character is discarded and Stage 2 terminates.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *在任何情况下,检查是否从前面的步骤所获得的char允许在输入字段中,将解析std::scanf给定的第1阶段中选择的转换符。如果它是允许的,它是在临时缓冲器和第2阶段重复积累。如果这是不允许的,第2阶段结束.
    原文:
    * In any case, the check is made whether the char obtained from the previous steps is allowed in the input field that would be parsed by std::scanf given the conversion specifier selected in Stage 1. If it is allowed, it is accumulated in a temporary buffer and Stage 2 repeats. If it is not allowed, Stage 2 terminates.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 第3阶段:转换和存储

  • chars积累在第2阶段的序列被转换成一个数字值
    原文:
    The sequence of chars accumulated in Stage 2 is converted to a numeric value
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *如果输入被解析为std::scanf的转换说明符中选择第1阶段(至 C++11)
    原文:
    * The input is parsed as if by std::scanf with the conversion specifier selected in Stage 1 (至 C++11)
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *输入被解析为std::strtoll为有符号整数vstd::strtoull为无符号整数,浮点vstd::strtoldv,或(C++11 起)
    原文:
    * The input is parsed as if by std::strtoll for signed integer v, std::strtoull for unsigned integer v, or std::strtold for floating-point v (C++11 起)
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果转换函数无法将整场,0存储在v(C++11 起)
    原文:
    If the conversion function fails to convert the entire field, the value 0 is stored in v (C++11 起)
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果转换功能结果正值过大,以适应v的类型,最积极的表示值存储在v(C++11 起)
    原文:
    If the conversion function results in a positive value too large to fit in the type of v, the most positive representable value is stored in v (C++11 起)
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果负值过大,以适应v的类型转换函数的结果,最负表示的值存储在v(C++11 起)
    原文:
    If the conversion function results in a negative value too large to fit in the type of v, the most negative representable value is stored in v (C++11 起)
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 在任何情况下,如果转换函数失败std::ios_base::failbit分配err
    原文:
    In any case, if the conversion function fails std::ios_base::failbit is assigned to err
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 否则,转换的数字结果被存储在v
    原文:
    Otherwise, the numeric result of the conversion is stored in v
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • *如果类型vboolboolalpha一样没有被设置,那么,如果要被存储的值是0false被存储,如果要被存储的值是1true被保存时,其它的任意值被分配给std::ios_base::failbiterr.
    原文:
    * If the type of v is bool and boolalpha is not set, then if the value to be stored is 0, false is stored, if the value to be stored is 1, true is stored, for any other value std::ios_base::failbit is assigned to err.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 在此之后,数字分组检查。如果丢弃在第2阶段中的千位分隔符的位置的任何不匹配的分组提供std::use_facet<std::numpunct<charT>>(str.getloc()).grouping()std::ios_base::failbit被分配给err.
    原文:
    After this, digit grouping is checked. if the position of any of the thousands separators discarded in Stage 2 does not match the grouping provided by std::use_facet<std::numpunct<charT>>(str.getloc()).grouping(), std::ios_base::failbit is assigned to err.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果第2阶段的测试结束in==enderr|=std::ios_base::eofbit执行设置EOF位的.
    原文:
    If Stage 2 was terminated by the test in==end, err|=std::ios_base::eofbit is executed to set the eof bit.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 返回值

in

[编辑] 注释

在C + +98 / C + +03,如果发生错误,v保持不变。在C + 11,它被设置为一个值,如上述那样.
原文:
In C++98/C++03, if an error occurs, v is left unchanged. In C++11, it is set to a value as described above.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 示例

[编辑] 另请参阅

提取物格式的数据
原文:
extracts formatted data
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(公共成员函数of std::basic_istream [edit]