C++中is.seekg(0)与is.seekg(0, is.end)的区别及cppreference使用技巧
C++ 输入流seekg方法区别及cppreference阅读技巧
is.seekg(0) 与 is.seekg(0, is.end) 的作用区别
seekg是C++输入流的成员函数,用于设置流内部读取位置指针的偏移量,第二个参数为偏移基准,默认值为std::ios::beg(流的起始位置),两个调用的核心差异如下:
is.seekg(0):等价于is.seekg(0, std::ios::beg),作用是将读取位置指针移动到流的起始位置,常用场景是读完流内容后重置指针,实现重新读取流数据的需求。is.seekg(0, is.end):将偏移基准指定为std::ios::end(流的末尾位置),作用是将读取位置指针移动到流的末尾位置,常用场景是搭配is.tellg()获取流的总字节长度。
可以参考下方示例代码理解使用场景:
#include <iostream> #include <sstream> int main() { std::stringstream ss("test content"); // 移动到末尾获取长度 ss.seekg(0, std::ios::end); std::cout << "流总长度:" << ss.tellg() << std::endl; // 输出12 // 重置到开头读取内容 ss.seekg(0); std::string res; std::getline(ss, res); std::cout << "流内容:" << res << std::endl; // 输出test content return 0; }
cppreference实用阅读技巧
可以通过以下方法降低阅读门槛:
- 精准定位查询目标:不需要完整浏览分类目录,直接搜索对应API的完整名称,比如要查
seekg就直接搜std::basic_istream::seekg,直接进入对应成员函数的详情页,避免无关信息干扰。 - 优先看核心内容:打开页面后先看顶部的简短功能说明、函数签名,暂时跳过开头的标准版本更迭历史部分,搞懂核心功能后再按需查看不同标准的差异。
- 结合示例反查说明:每个API页面底部都有可直接运行的极简示例代码,遇到文字描述看不懂的参数、返回值时,直接看示例中的用法,再反过来对应参数说明理解,效率远高于纯读文字。
- 利用站内术语解释:遇到不认识的C++标准术语,直接在站内搜索术语关键词,绝大多数术语都有单独的解释页面,不需要额外查找其他资料。
- 按需切换语言版本:页面右上角有语言切换按钮,中文版本的核心API说明翻译准确,适合英文阅读吃力的用户使用,仅在需要查询最新标准特性时再切回英文版本即可。
内容的提问来源于stack exchange,提问作者Victor Ajayi
相关产品推荐
相关产品推荐

