关于std::ifstream中seekg(0, std::ios_base::beg)的简化疑问
关于
seekg调用的简化问题 你的理解部分正确,直接说结论和原因:
可以用
is.seekg(0)替代is.seekg(0, std::ios_base::beg)
C++标准库中std::ifstream的seekg有一个单参数重载:seekg(std::streampos pos),这个参数代表相对于流起始位置的绝对偏移量,默认参照就是std::ios_base::beg。所以传0就等价于从开头偏移0,和原代码效果完全一致。不能用
is.seekg(std::ios_base::beg)std::ios_base::beg是std::ios_base::seekdir枚举类型,而seekg并没有只接受seekdir作为参数的重载,这么写会触发编译错误——编译器找不到匹配的函数签名。
额外实用提示
原代码打开文件时最好加上二进制模式标记,避免文本模式下的换行符转换(比如Windows平台下\n会被转成\r\n,导致读取的字节数和实际文件大小不符),修改后的打开语句应该是:
std::ifstream is("input.dat", std::ios::binary);
内容的提问来源于stack exchange,提问作者a_floating_point
相关产品推荐
相关产品推荐

