num_put::do_put
调用将数字转换为 CharType按顺序表示数字的虚函数为特定区域设置设置为。
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
bool _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
long _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
double _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
long double _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
const void * _Val
) const;
virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
const long long _Val
) const; virtual iter_type do_put(
iter_type _Dest,
ios_base& _Iosbase,
_Elem _Fill,
const unsigned long long _Val
) const;
参数
_Next
解决的迭代器插入的字符串的第一个元素。_Iosbase
指定了包含用于的numpunct方面的区域设置对标点输出和标志格式化输出的流。_Fill
为了节省空间使用的字符。_Val
是输出的数字或布尔值类型。
返回值
输出迭代器在最后一个元素之外的位置都产生的地址。
备注
第一个虚拟保护的成员函数生成开始在 _Next 的时序组件由 _Val的值生成整数输出字段。 函数返回指定下一个位置的迭代器插入在生成的整数输出字段之外的元素。
整数输出字段由打印功能使用的规则与生成的用于生成对文件的一系列 char 元素。 每个这样的字符元素通过简单,一对一映射假定映射到类型 CharType 的一个对应的元素。 在打印功能填充或空格的字段或数字0,但是,do_put 使用 fill。 确定等效的打印转换规范如下所示:
如果 iosbase。标志 & ios_base::basefield == ios_base::十月,转换规范是 lo。
如果 iosbase.flags & ios_base::basefield == ios_base::十六进制,转换规范是 lx。
否则,将规范是 ld。
如果 iosbase。宽度 不为零,此值的字段宽度。预置。 函数来调用 iosbase。重置字段的宽度width(0)为零。
才需要的元素 N的 最小值指定输出字段与 iosbase,小于填充发生。宽度。 此类填充包含 N – fillwidth 复制序列。 然后填充发生如下所示:
如果 iosbase。flags & ios_base::adjustfield == ios_base::左侧,标志 – 中预置。 (空白在生成的文本之后。)
如果 iosbase.flags & ios_base::adjustfield == ios_base::内部,标志 0 中预置。 (对于数值输出字段,填充发生有0的打印功能空白。)的位置
否则,其他标志未预置。 (空白在生成的序列之前发生。)
最终:
如果 iosbase。flags & ios_base::showpos 不为零,标志 + 中的前面添加到的转换规范。
如果 iosbase。flags & ios_base::showbase 不为零,标志 # 中的前面添加到的转换规范。
区域设置方面进一步取决于整数输出字段的格式调用 use_facet <numpunct<Elem>返回的fac (iosbase。getloc)。 尤其是在下列情况下:
fac。分组 确定num如何在任何左侧分组小数点
fac。thousands_sep 确定在任何左侧分隔数字组小数点的顺序
如果 fac不会分组的约束。grouping (其第一个元素具有值CHAR_MAX),则任何实例 fac。thousands_sep 在输出字段生成。 否则,分隔符,在打印发生转换后,插入。
第二个虚拟保护的成员函数:
virtual iter_type do_put(iter_type _Next, ios_base& _Iosbase,
CharType _Fill, unsigned long _Val) const;
的行为与第一个相同,不同之处在于,它将 lu替换 ld 的转换规范。
第三个虚拟保护的成员函数:
virtual iter_type do_put(iter_type _Next, ios_base& _Iosbase,
CharType _Fill, double _Val) const;
的行为与第一个相同,不同之处在于,它由 val的值生成一个浮点输出字段。fac。decimal_point 确定从部分数字分隔整数位数的序列。 确定等效的打印转换规范如下所示:
如果 iosbase。flags & ios_base::floatfield == ios_base::内置,转换规范是 lf。
如果 iosbase。flags & ios_base::floatfield == ios_base::科学,转换规范是 le。 如果 iosbase。flags & ios_base::大写 不为零,e 用E.替换。
否则,将规范是 lg。 如果 iosbase。flags & ios_base::uppercase 不为零,g 用G.替换。
如果 iosbase。flags & ios_base::fixed 不为零,或者 iosbase。精度 小于零,该值 iosbase的一个精度大于。precision 中的前面添加到的转换规范。 所有填充相同的行为与整数输出字段。 填充字符是 fill。 最终:
如果 iosbase。flags & ios_base::showpos 不为零,标志 + 中的前面添加到的转换规范。
如果 iosbase。flags & ios_base::showpoint 不为零,标志 # 中的前面添加到的转换规范。
第四个虚保护的成员函数:
virtual iter_type do_put(iter_type _Next, ios_base& _Iosbase,
CharType _Fill, long double _Val) const;
同样正常运行第三,不同之处在于,在转换规范的限定符 l 带L.替换。
第五个虚拟保护的成员函数:
virtual iter_type do_put(iter_type _Next, ios_base& _Iosbase,
CharType _Fill, const void *_Val) const;
相同的行为第一,除此之外,转换规范是 p**,** 以及所需的所有限定符指定空白。
第六个虚拟保护的成员函数:
virtual iter_type do_put(iter_type _Next, ios_base& _Iosbase,
CharType _Fill, bool _Val) const;
的行为与第一个相同,不同之处在于,它会从 _Val的boolean输出字段。
一个布尔值输出字段采用两种形式之一。 如果 iosbase。flags & ios_base::boolalpha 是 false,函数返回 do_put的成员(_Next、_Iosbase,_Fill,(long)_Val),通常会导致一个生成的顺序0 (对于 false)或1 (对于 true)。 否则,所生成的顺序可以是任何 fac。falsename) (对于 false),或者 fac。truename (对于 true)。
第七个虚拟保护的成员函数:
virtual iter_type do_put(iter_type next, ios_base& iosbase,
Elem fill, long long val) const;
的行为与第一个相同,不同之处在于,它将 lld替换 ld 的转换规范。
第八个虚拟保护的成员函数:
virtual iter_type do_put(iter_type next, ios_base& iosbase,
Elem fill, unsigned long long val) const;
的行为与第一个相同,不同之处在于,它将 llu替换 ld的转换规范。
示例
为 放置参见示例,调用 do_put。
要求
标头: <locale>
命名空间: std