我什么时候应该关心 std::iostream::sentry?

2024-01-11

网上参考资料对目的的描述相当简短和模糊std::iostream::sentry。我什么时候应该关心这个小动物?如果只是为了内部使用,为什么要公开呢?


每当您需要使用流提取或输出数据时,都会使用它。也就是说,每当你创建一个operator>>、提取运算符,或operator<<,插入运算符。

其目的是简化逻辑:“是否设置了任何失败位?同步缓冲区。对于输入流,可以选择去掉任何空格。好吧,准备好了吗?”

所有提取流操作符应以以下内容开头:

// second parameter to true to not skip whitespace, for input that uses it
const std::istream::sentry ok(stream, icareaboutwhitespace);

if (ok)
{
    // ...
}

所有插入流运算符都应以:

const std::ostream::sentry ok(stream); 

if (ok)
{
    // ...
}

这只是一种更干净的做法(类似于):

if (stream.good())
{
    if (stream.tie())
        stream.tie()->sync();

    // the second parameter
    if (!noskipwhitespace && stream.flags() & ios_base::skipws)
    {
        stream >> std::ws;            
    }
}

if (stream.good())
{
    // ...
}

ostream只是跳过空白部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该关心 std::iostream::sentry? 的相关文章

随机推荐

  • 让 Swift 相信函数由于抛出异常而永远不会返回

    因为 Swift 没有抽象方法 所以我创建了一个方法 其默认实现无条件地引发错误 这会强制任何子类重写抽象方法 我的代码如下所示 class SuperClass func shouldBeOverridden gt ReturnType
  • 触发子元素的 onclick 事件,但不触发父元素的 onclick 事件

    我有一些嵌套元素 每个元素都有一个 onclick 事件 在大多数情况下 我希望当用户单击子事件时触发这两个事件 父事件和子事件都会被触发 默认行为 但是 至少在一种情况下 我想触发孩子的 onclick 事件 来自 javascript
  • 推荐的 Android 音乐格式 - mp3、ogg 还是其他? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我被问到我的项目需要哪种格式的音乐 通过查看文档 Android 平台似乎提供了一个不错的选择 音频当然不是我的强项 所以我想知道是否有一种最适
  • 为什么 du 或 echo 流水线不起作用?

    我正在尝试对当前目录中的每个目录使用 du 命令 所以我尝试使用这样的代码 ls du sb 但它没有按预期工作 它仅输出当前 的大小目录仅此而已 echo 也是同样的情况 ls echo 输出空行 为什么会发生这种情况 使用管道发送输出
  • 如何在 Java 中创建 PKI

    我想创建存储在数据库中的证书 但我不知道如何做到这一点 如果退出 API 或库可以帮助我做到这一点 谢谢 公钥基础设施不仅仅是签名公钥的数据库 例如 PKI 最重要的部分之一是使用 OCSP 协议撤销证书的能力 简而言之 用 java 构建
  • 将曲线拟合到数据集

    我有一个包含两个数据集的图 它产生轻微的梯度 其中最佳拟合曲线可能会被过度绘制 目前我只能得到一条最适合的直线 我明白scipy optimize curve fit应该能够帮助我 但这需要我知道我想要过度绘制的函数 我认为 下面是我的代码
  • 如何以编程方式隐藏/禁用 Android 软键盘上的表情符号

    是否可以隐藏特定的键盘按钮 我有一个EditText在某些设备上 其键盘上有笑脸 而在其他设备上则没有 我想在所有设备上隐藏它 下面是我的 XMLEditText android id id text editor android layo
  • 我应该如何在我的 ApplicationController 中使用 Draper?

    我的问题涉及以下开发堆栈 轨道3 2 1 德雷珀 0 14 血统1 2 5 我想做的是将导航传递到我的布局 所以我在我的过滤器中定义了一个之前的过滤器ApplicationController class ApplicationContro
  • MySQL 8 创建新用户,密码不起作用

    我使用 MySQL 已经好几年了 创建新用户直到 MySQL 5 x 版本的命令如下 GRANT ALL PRIVILEGES ON TO username localhost IDENTIFIED BY password 最近我安装了 M
  • 如何设置 Spring Boot 来运行 HTTPS / HTTP 端口

    Spring Boot 有一些属性来配置 Web 端口和 SSL 设置 但是一旦设置了 SSL 证书 http 端口就会变成 https 端口 那么 如何让两个端口同时运行 例如 80 和 443 正如您所看到的 只有一个端口的属性 在本例
  • 将视图添加到constraintLayout,其约束类似于另一个子项

    I have a constraint layout alpha9 with views spread all over it and I have one particular ImageView that I need to repli
  • 如何使用 LINQ 获取用户之间的最新消息?

    我有一个表显示消息之间的关系 像这样 我想获取每个用户的最后一条消息 因此 例如 结果将是表中的 id 91 和 id 92 var messages await dbContext Messages Include x gt x User
  • 安装 MongoDB java 驱动程序

    我对 Java 和 MongoDB 世界都很陌生 我想使用 MongoDB 和 Java 我已经下载了 Java 版 MongoDB 驱动程序 这是一个 jar 文件 我的问题是如何使用这个 Jar 文件 我使用了这个命令 但出现错误 ja
  • 使用 javascript 链接下载 PhantomJS

    我正在尝试抓取以下网站 如果您单击表格右上角标题为 导出数据 的小按钮 则会运行 JavaScript 脚本 并且我的浏览器会下载 csv 格式的文件 我希望能够编写一个 PhantomJS 脚本来自动执行此操作 有任何想法吗 上面的按钮被
  • 如何在 Javascript 中删除“mouseup”事件监听器

    在这里 我拖动一个元素并放到另一个地方 如果我不使用事件侦听器 它会很好地工作 但如果我以这种格式使用它 它不会执行 放置 操作 此链接包含我的代码 带有事件监听器 访问http jsfiddle net vishwateja2000 wH
  • 在 iPad 版 SDK 3.2 中使用 MPMoviePlayerViewController

    我开发了一个 iPhone 应用程序 它运行 MPMoviePlayer 3 2 SDK 之前的版本 没有任何问题 我知道这是一个新手问题 但如何让电影在新的 MPMoviePlayerViewController 中播放 我只收到音频并希
  • 的开始/结束外观转换的调用不平衡

    当我模拟我的应用程序时 我遇到了这个问题 它不是错误或警告 但它出现在我的控制台中 以前有人遇到过这种情况吗 就我而言 当您非常快速地单击表格视图中的两个选项卡时 就会发生此错误 结果导致标题名称错误 后退按钮消失 有人提到 当你推送视图时
  • 让 ASP.MVC2/VS2010 应用程序在 IIS 7.5 中工作

    我最近下载了 VS2010 beta 2 并开始使用 ASP NET MVC2 最初的开发是使用 Casini 完成的 但现在我想从 IIS 7 5 运行该应用程序 我运行的是 Windows 7 我已经安装了 IIS6 元数据库兼容性 并
  • 使用 Python 通过 Binance API 进行交易时出现问题

    我试图在不使用外部库的情况下在美国版 Binance API 上进行交易 我可以使用 GET 请求成功获取价格并显示我的帐户余额urllib 第一个示例代码有效 我可以通过我的API KEY and SECRET KEY没有问题 这些值是私
  • 我什么时候应该关心 std::iostream::sentry?

    网上参考资料对目的的描述相当简短和模糊std iostream sentry 我什么时候应该关心这个小动物 如果只是为了内部使用 为什么要公开呢 每当您需要使用流提取或输出数据时 都会使用它 也就是说 每当你创建一个operator gt