tellp在空ostringstream上的标准行为

时间:2009-02-08 20:04:28

标签: c++ standards-compliance stringstream

我对在空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

这个标准符合行为吗?这种行为是否与其他编译器一致?

1 个答案:

答案 0 :(得分:1)

27.6.2.4:

pos_type tellp();
  

返回:如果fail()!= false,则返回   pos_type(-1)表示失败。   否则,返回   rdbuf() - > pubseekoff(0, cur out )。

pubseekoff 在失败时返回-1。但是我不确定为什么在 ostringstream 的情况下会发生这种情况,可能太累了,无法找到关于 undefined 依赖于实现的的字样。根据我的常识,我会说对于 ostringstream ,对于默认构造的ostream -1,这应该给0,对于新打开的文件0,应该给ostream。