首先,这显然是实现中的一个错误。标准上说
那个
std::ios_base::width
和
std::ios_base::precision
使用
std::streamsize
,必须是“已签名的基本
在现代系统中,我希望
long long
,或可能
long
.
std::size_t
需要无符号,
并且可以说也不是“基本积分型”(尽管它可能是
一个是typedef)。
事实仍然是,成员发挥作用
std::ios_base::width
和
std::ios_base::精度
可能(也可能)使用不同的类型
而不是操纵器(
int
). 如果
std::streamsize
是
长-长
,会有一些价值观
适合
整数
。此类值实际发生在
正确的代码对我来说似乎很小,我只能坚持下去
整数
(不要混淆
auto
),不必担心
溢流或者,我会使用
整数
,但使用
assert
之前,到
确保没有溢出。
最后:通常,宽度是元素的总宽度。所以
您应该设置的宽度为
w / x.size() - 1
(包括
第一元件)。至少在理论上;我不知道这对你有多有用
数组类型(我当然不会坚持,只要
修改的语义被很好地记录)。当然,精度是
粘性的您不必为每个值设置它。(另一方面,
用户应该记住并恢复它。)