gpt4 book ai didi

c++ - 将 ostream::opfx/osfx 从 Unix 移植到 Linux

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:55 25 4
gpt4 key购买 nike

我正在将一些 C++ 代码从 Unix 移植到 Linux (Red Hat)。

我遇到了以下模式:

ostream& myfunction(ostream& os)
{
if (os.opfx())
{
os << mydata;
os.osfx();
}
return os;
}

函数opfxosfx在 Red Hat 4.5 下不可用。我看到一个建议here使用ostream::sentry功能:

ostream& myfunction_ported(ostream& os)
{
ostream::sentry ok(os);
if (ok)
{
os << mydata;
}
return os;
}

我从 here 看到opfx的目的是在刷新并继续之前验证流状态。

我的问题:

我以为 ostream函数在对流进行操作之前已经检查了流状态。这是真的?这在某些时候不是真的吗?

正在替换 opfxsentry必要的?什么是sentry给我那个operator<<还不给我?

最佳答案

任何现有的插入器(除非它真的有严重的错误)已经在创建一个哨兵对象,所以只要您通过现有的插入器完成您的工作,您就不需要自己创建一个哨兵对象。

当您自己将数据直接写入流缓冲区时,您确实需要创建一个哨兵对象,而无需任何现有插入器的帮助(即,当您不使用任何其他任何插入器时)会为你创建一个哨兵)。

对于此代码,您可以完全消除创建哨兵对象并执行如下操作:

ostream& myfunction(ostream& os)
{
return os << mydata;
}

请注意,现有代码被声明为返回 ostream &,但实际上似乎并未返回任何内容。

关于c++ - 将 ostream::opfx/osfx 从 Unix 移植到 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com