C++ 中短路 `operator<<` 输出

2024-01-02

我有一些代码散布着这样的结构

if(debug) {
    Output << "f1: " << f1() << "\n";
}

现在我想做的是编写一个流类Debug我可以这样写

Debug << "f1: " << f1() << "\n";

如果设置了某个全局标志,那么这将生成输出,否则不会。

现在:这可以很容易地通过制作来完成Debug返回一个流/dev/null这会吞噬输出。问题是f1()仍然会被评估(并“渲染”成可能更昂贵的文本表示),这可能对性能非常不利。

现在我的问题:是否有任何技巧可以允许跳过“评估”

"f1: " << f1() << "\n"

完全如果Debug决定不应该进行任何输出?类似于 C++ 所做的短路f() && g() where g()不评估如果f()is false(我认真考虑过编写一个使用&&作为输出运算符,但从我读到的来看,过载并没有完成短路operator&&)


你能做的就是定义这个宏:

#define Debug_Stream \
if(!debug); else Output

这将使:

Debug_Stream << "f1: " << f1() << "\n";

变得等价于:

if(debug) {
    Output << "f1: " << f1() << "\n";
}

但从字面上看(加上空白以提高可读性)

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

C++ 中短路 `operator<<` 输出 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include

随机推荐

  • 检测外来词

    我正在编写一个脚本来检测语言 A 中来自语言 B 的单词 这两种语言非常相似 并且可能具有相同单词的实例 如果您对我目前掌握的内容感兴趣 代码就在这里 https github com arashsa language detection
  • 具有透明背景和旋转渐变边框的按钮

    我想要实现的是一个像这样的按钮 完成后 我需要在悬停时设置动画 我能找到的最接近的例子是这个codepen https codepen io Chester pen QPoyjN https codepen io Chester pen Q
  • .NET ASMX - 返回纯 JSON?

    我在这里要疯了 我查看了以下条目并none他们中的一些人正在纠正我所看到的异常行为 如何从 2 0 asmx Web 服务返回 JSON https stackoverflow com questions 288850 how to ret
  • Next Js - Firebase 部署问题

    我正在构建一个新的 Next Js 应用程序 它是使应用程序部署在vercel https vercel com 通过链接 gitlab Next js 项目 对于同一个项目 我需要将其部署在 firebase 中 我尝试过的事情 gt 制
  • -webkit- 文本区域在垂直滚动条上丢失顶部和底部填充

    我有一个具有固定宽度和高度并且没有调整大小的文本区域元素 当出现垂直滚动条时 元素的填充 顶部和底部 将被忽略 这是一个 plnkr 演示 http plnkr co edit jOeYXqkOZk3FCT24BRrk p preview
  • 为 fabpot/goutte 客户端设置 CURL 参数

    我正在使用 goutte fabpot goutte 开发一个网络爬虫 当我尝试连接到 https 站点时 它会抛出错误 因为该站点正在使用自签名证书 我正在尝试找到设置curl参数的方法来忽略ssl证书是自签名的事实 按照中的说明进行操作
  • 找出php中两个字符串之间的匹配百分比?

    任何人都可以建议我一个更好的方法 或最优选的方法 来使用模糊逻辑查找两个字符串之间的匹配百分比 即这两个字符串 例如名称 在百分比方面的相关程度 谁能帮我写代码吗 我真的想知道从哪里开始 str1 Hello str2 Hello Worl
  • Mongoose 连接/模型:需要始终运行在开放状态吗?

    我正在使用 Mongoose 3 连接数据库最明显的方法是 conn mongoose createConnection conn on open 问题是 我需要在 open 回调中定义所有模型吗 如果是这样 我将不得不创建一个initMo
  • 缓存 git-tf 的 TFS 登录凭据

    我在工作中使用 git 和 git tf 但每次使用 git tf 执行任何命令时 我都必须输入登录凭据 有没有办法缓存 git tf 的 TFS 登录凭据 这样我就不必每次都输入它们 如果您使用 Kerberos 并与 TFS 服务器所在
  • 同时垂直滚动两个表格

    我有两个必须一起滚动的表 vscroll on scroll function e divTable1 scrollTop e scrollTop divTable2 scrollTop e scrollTop 不过有一点滞后问题 Tabl
  • 将 LOAD DATA INFILE 与阿拉伯语数据结合使用

    我正在尝试将 csv 文件导入到表中 我已经弄清楚如何使用以下查询插入数据 LOAD DATA INFILE examplesofdata csv INTO TABLE coins FIELDS TERMINATED BY ENCLOSED
  • 使用 boost::regex 获取子 match_results

    嘿 假设我有这个正则表达式 test 0 9 我将其与以下内容相匹配 test1test2test3test0 const bool ret boost regex search input what r for size t i 0 i
  • 替换安全管理器 checkMemberAccess()

    Java 安全管理器方法checkMemberAccess https docs oracle com javase 7 docs api java lang SecurityManager html checkMemberAccess j
  • 用动画填充颜色 SVG 路径

    我使用以下方法来填充 SVG 路径的颜色 有没有办法给它添加动画 从中心开始填充颜色并展开 function btn test1 on click function path1 attr fill 0000 这个答案提供了四种不同的选择使用
  • 在 Maven 存储库中找不到项目

    我有一个带有子模块的 Maven 模块 父级的相关部分是这样的
  • T-SQL 函数获取存储字符的 ASCII 值

    我正在使用 T SQL 块来获取存储在数据库列中的 ascii 字符转储 我知道在 Oracle 中使用 DUMP 函数可以轻松完成此操作 我不熟悉 SQL Server sytax 但我正在使用类似的东西 SET NOCOUNT ON C
  • 来自柏林噪声的每顶点法线?

    我正在 Opengl 几何着色器中生成地形 但在计算照明法线时遇到问题 我使用几何着色器中实现的柏林噪声函数动态生成每帧地形 因为这 我需要一种有效的方法来计算每个顶点的法线基于噪声函数 没有纹理或任何东西 我可以采用 2 条边的叉积来获取
  • 与简单的用户 ID 检查相比,声明/角色/策略授权的技术优势是什么?

    我使用 Identity Server 并通过策略和角色保护端点 这些反映在我分发给客户端的访问令牌中 今天 我收到建议 不要保护这样的方法 Authorize Policy Elevated HttpGet metadata public
  • CUDA 中的嵌套内核

    CUDA 目前不允许嵌套内核 具体来说 我有以下问题 我有N个M维数据 为了处理 N 个数据点中的每一个 需要按顺序运行三个内核 由于不允许嵌套内核 因此我无法创建调用三个内核的内核 因此 我必须串行处理每个数据点 一种解决方案是编写一个包
  • C++ 中短路 `operator<<` 输出

    我有一些代码散布着这样的结构 if debug Output lt lt f1 lt lt f1 lt lt n 现在我想做的是编写一个流类Debug我可以这样写 Debug lt lt f1 lt lt f1 lt lt n 如果设置了某