为什么num_get和num_put不对称
Why are num_get and num_put asymmetric?
std::basic_istream
的算术提取操作符对所有8种整数类型(不列出字符,处理方式不同)都具有非虚拟重载,并且它调用num_get::get
,其中6种类型(缺少short和int的有符号版本)具有单独的虚拟重载。
std::basic_ostream
的算术插入操作符对所有8个整数类型也有非虚重载,它调用num_put::put
,它只对4个类型有虚重载,这4个类型是long
、long long
和它们的无符号变体。对于较小的类型,插入操作符执行整数提升。
为什么在用户可扩展性的其他方面存在差距?为每个整数类型提供用户定义的处理似乎是不可能的(例如,在iostream接口之上构建一个保持类型的序列化库),而且,它是不对称的。这本来不费什么力气就能做到的。这是一种权衡吗?
根据标准c++ Iostreams和locale:
乍一看,它似乎是put()的版本,简称为int,或者浮子都不见了。这样做的目的是为了保持标准库简洁,short或int类型的值可以是由long的版本处理。类似地,float类型的值可以由double的put()版本处理。
然后是关于num_get::get()
:
同样,与num_put::put()一样,这些类型不是绝对的
读取值时必须考虑到溢出,因此需要为每种类型提供一个提取器。当你写值的时候,你不需要,所以最大的类型就足够了。在过去,最大的字体是long
。当long long
被添加时,为了向后兼容,long
的版本被保留。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 我的神经网络不起作用 [XOR 问题]
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- QSqlquery prepare()和bindvalue()不工作
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 检查输入是否不是整数或数字
- std::shared_ptr 和 std::unique_ptr 构造函数之间的不对称
- 离散分布不对称
- 如果矩阵密集且不对称,特征库矩阵/矢量操作是否比 .net 矩阵/向量操作更快?
- 为什么我不能在犰狳中得到这个对称正定矩阵的平方根?
- 由于 RPTR->num=30 与 (*rptr).num=30 相同,但是*((*rptr).ptr).name 不起作用为什么?
- 加密API RSA公钥可以解密数据,并不像预期的那样不对称
- 如何定义不对称+运算符
- 旋转一个不对称的截头体
- 为什么num_get和num_put不对称
- 测量NUMA(非均匀内存访问).没有明显的不对称.为什么