我对在空 tellp
上调用 ostringstream
的标准行为有疑问。我有一个函数 foo ,它首先调用 tellp
:
void foo(std::ostream& os)
{
std::ostream::pos_type pos = os.tellp();
// do some stuff.
}
int main()
{
std::ostringstream os;
foo(os);
}
在 Visual Studio 2005 中,使用新创建的空
ostringstream
调用此函数会导致 pos
变量设置为无效的 pos_type
,而在 Visual Studio 2005 中设置为 pos_type(_BADOFF)
。ofstream
没有相同的行为,其中 tellp
返回 pos_type(0)
,这是一个有效的 pos_type
。这是符合标准的行为吗?这种行为与其他编译器一致吗?
最佳答案
27.6.2.4:
pos_type tellp();
pubseekoff 在失败时返回 -1。但是我不确定为什么在 ostringstream 的情况下会发生这种情况,也许太累了,找不到关于未定义或依赖于实现的词。使用我的常识,我会说对于 ostringstream 这应该给出 0,对于默认构造的 ostream -1,对于带有新打开的文件 0 的 ostream。
关于c++ - Tellp 在空 ostringstream 上的标准行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/526270/