"seekp"和"seekg"可以互换吗?
are "seekp" & "seekg" interchangeable?
我刚刚注意到,在microsoft visual studio中,通过"seekp"来改变位置,在处理文件时,我也隐式地改变了读取位置。
我想知道这是否是"可移植"的行为?我能期待阅读& &;写作是为了保持不变吗?因此:tellp
&tellg
总是返回相同的值吗?
对于文件位置它们是相同的。换句话说,只维护了一个指针。
From 27.9.1.1p3
:
为输入序列和输出序列。
因此,seekg
和seekp
对于文件流是可互换的。然而,对于其他类型的流则不是这样,因为它们可能为put和get位置保留单独的指针。
Update:所以从所有的评论和一切,似乎对于fstream, seekp和seekg使用相同的指针。但是对于stringstream和其他非基于文件的流,它们是分开的。
原始文章:
在g++ 4.7.2的linux下不适合我。他们似乎是独立的:
#include <sstream>
#include <iostream>
int main(int, char**) {
std::stringstream s("0123456789");
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
s.seekp(2);
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
s.seekg(4);
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
}
输出:put pointer: 0
get pointer: 0
put pointer: 2
get pointer: 0
put pointer: 2
get pointer: 4
你描述的行为听起来也不符合这里的引号:
设置get指针的位置。get指针决定与流相关联的源中要读取的下一个位置。
:
设置放置指针的位置。中的位置下一个输出操作将要执行的输出序列的地方。
相关文章:
- 如何互换使用字符* 和 std::string?
- 使用max_heap和min_heap互换
- 可以在模板专业化中互换使用类和结构
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 将数据存储在具有可互换 x/y 坐标的 2D 矩阵中
- 使用 seekp() 和 tellg() 进行数据处理
- 通过将张量互换的特征张量收缩中的张量来引起不同的结果
- 可互换使用的类型和非类型模板参数
- 使用 tellg() 和 seekp() 覆盖文件
- 易于运动,编程互换,C
- 实施互换功能持续复杂性
- 非类型模板参数的占位符类型在模板模板参数的情况下是否可以互换
- 通过创建一个决定使用哪种产品来互换使用Sleep和usleep
- 我们可以互换控制台和 Win32 C++ 的命令和功能吗?
- 将类互换使用浮动指针
- EXIF和XMP之间有什么关系?它们可以互换吗?
- OPENCV矩形高度和宽度保持互换
- seekg 和 seekp :seek(streampos pos) 和 seek(streamoff off, ios
- 与fstream一起seekp和seekg
- "seekp"和"seekg"可以互换吗?