4

tellp我对调用empty的标准行为有疑问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变量设置为 invalid pos_type,而在 Visual Studio 2005 中设置为pos_type(_BADOFF)

ofstream没有相同的行为,其中tellp返回pos_type(0),这是一个有效的pos_type

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

4

1 回答 1

1

27.6.2.4:

pos_type tellp();

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

pubseekoff在失败返回 -1。但是我不确定为什么在ostringstream的情况下会发生这种情况,可能是太累了,找不到关于undefinedimplementation-dependent的词。使用我的常识,我会说对于ostringstream这应该给 0,对于默认构造的 ostream -1,对于新打开的文件 0 的 ostream。

于 2009-02-08T23:45:00.187 回答