std::basic_istream
的算术提取运算符有8种整数类型的非虚拟重载(不列出字符,因为它们被单独处理),它调用num_get::get
,该函数有6种虚拟重载(缺少short和int的有符号版本)。
std::basic_ostream
的算术插入运算符也有8种整数类型的非虚拟重载,它调用num_put::put
,该函数只有4种虚拟重载,即long
、long long
及其无符号版本。对于较小的类型,插入运算符执行整数提升。
std::basic_istream
的算术提取运算符有8种整数类型的非虚拟重载(不列出字符,因为它们被单独处理),它调用num_get::get
,该函数有6种虚拟重载(缺少short和int的有符号版本)。
std::basic_ostream
的算术插入运算符也有8种整数类型的非虚拟重载,它调用num_put::put
,该函数只有4种虚拟重载,即long
、long long
及其无符号版本。对于较小的类型,插入运算符执行整数提升。
当您读取值时,必须考虑到溢出情况,因此需要为每种类型创建一个提取器。当您写入值时,则不需要,因此最大类型就足够了。在旧时代,最大类型是long
。添加long long
后,long
的版本保留了向后兼容性。
num_put
中保留类型信息(例如用于二进制输出)。 - LB--