算术提取运算符对所有 8 种整数类型std::basic_istream
都有非虚拟重载(不列出字符,无论如何处理方式不同),它调用num_get::get
,其中有 6 个有单独的虚拟重载(缺少 short 和 int 的有符号版本)
算术插入运算符对于所有 8 种整数类型std::basic_ostream
也有非虚拟重载,它调用num_put::put
,它只对 4 种类型有虚拟重载,它们是long
,long long
以及它们的无符号变体。对于较小的类型,插入运算符执行整数提升。
为什么在用户可扩展性方面存在差距?似乎不可能为每个整数类型提供用户定义的处理(例如,在 iostream 接口之上构建一个类型保留的序列化库),而且它是不对称的。不费吹灰之力就可以实现。有取舍吗?