Cub*_*bbi 8 c++ locale iostream
算术提取运算符对所有8个整数类型std::basic_istream
都有非虚拟重载(不列出字符,无论如何都是以不同的方式处理),并调用它num_get::get
,其中有6个具有单独的虚拟重载(缺少short和int的签名版本)
用于算术插入运算符std::basic_ostream
还具有所有8种整数类型的非虚拟重载,并呼吁num_put::put
,其中仅具有用于4种类型的虚拟过载,它们是long
,long long
以及它们的无符号的变体.对于较小的类型,插入运算符执行整数提升.
为什么在用户可扩展性方面存在差距呢?似乎不可能为每个整数类型提供用户定义的处理(例如,在iostream接口之上构建一个类型保留的序列化库),而且它是不对称的.它可以通过很少的努力实现.有没有权衡?
乍一看,似乎缺少表示short、int 或float 的put() 版本。目的是保持标准库的接口简洁,并且 long 版本可以处理 Short 或 int 类型的值。类似地,float 类型的值可以由 double 的 put() 版本来处理。
然后稍后关于num_get::get()
:
同样,与 num_put::put() 一样,省略了不是绝对必要的类型。