tellp 在空 ostringstream 上的标准行为
我对在空 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
27.6.2.4:
失败时pubseekoff返回-1。 但我不确定为什么在 ostringstream 的情况下会发生这种情况,也许太累了,找不到有关 未定义 或依赖于实现的单词。 根据我的常识,我会说对于 ostringstream 这应该给出 0,对于默认构造的 ostream -1,对于新打开文件的 ostream 应该给出 0。
27.6.2.4:
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.