为什么num_get和num_put不对称?

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接口之上构建一个类型保留的序列化库),而且它是不对称的.它可以通过很少的努力实现.有没有权衡?

Jes*_*ood 4

根据标准 C++ Iostreams 和 Locales

乍一看,似乎缺少表示short、int 或float 的put() 版本。目的是保持标准库的接口简洁,并且 long 版本可以处理 Short 或 int 类型的值。类似地,float 类型的值可以由 double 的 put() 版本来处理。

然后稍后关于num_get::get()

同样,与 num_put::put() 一样,省略了不是绝对必要的类型。