tellp 在空 ostringstream 上的标准行为

发布于 2024-07-13 18:20:14 字数 642 浏览 10 评论 0原文

我对在空 ostringstream 上调用 tellp 的标准行为有疑问。 我有一个函数 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 code> 变量设置为无效的 pos_type,在 Visual Studio 2005 中设置为 pos_type(_BADOFF)

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

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

I have a question on the standard behavior of calling tellp on an empty ostringstream. I have a function foo which calls tellp the first thing:

void foo(std::ostream& os)
{
    std::ostream::pos_type pos = os.tellp();
    // do some stuff.
}

int main()
{
    std::ostringstream os;
    foo(os);
}

In Visual Studio 2005, calling this function with a newly created and empty ostringstream results in the pos variable to be set to an invalid pos_type, which in Visual Studio 2005 is set to pos_type(_BADOFF).

ofstream does not have the same behavior, where tellp returns pos_type(0), which is a valid pos_type.

Is this standard conforming behavior? Is this behavior consistent with other compilers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抚笙 2024-07-20 18:20:14

27.6.2.4:

pos_type tellp();

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

失败时pubseekoff返回-1。 但我不确定为什么在 ostringstream 的情况下会发生这种情况,也许太累了,找不到有关 未定义依赖于实现的单词。 根据我的常识,我会说对于 ostringstream 这应该给出 0,对于默认构造的 ostream -1,对于新打开文件的 ostream 应该给出 0。

27.6.2.4:

pos_type tellp();

Returns: if fail() != false, returns
pos_type(-1) to indicate failure.
Otherwise, returns
rdbuf()->pubseekoff(0, cur, out).

And pubseekoff returns -1 on fail. But am not sure why this happens for you in the case of ostringstream, maybe was too tired to find the words about undefined or implementation-dependent. Using my common sense I would say that for ostringstream this should give 0, for default constructed ostream -1, and for ostream with freshly opened file 0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文