If 语句与函数指针

2023-11-25

目标是根据复选框是否打开或关闭来更改事件循环中的行为。我能想到的最简单的方法就是每次运行循环时测试复选框状态。

// if-statement

void action() { /* ... */ }


void someLoop() {

  if (checkboxTrue) {
    action();
  }
  // ... other stuff

}

如果使用函数指针,代码是否会性能更高、更简洁,或者以其他方式更好?像这样:

// function pointer

void action() { /* ... */ }
void empty() {}
void (*actionPtr)();


void checkboxChanged(int val) {

  if (val == 1)
    actionPtr = &realAction;
  else
    actionPtr = ∅

}

void someLoop() {

  (*actionPtr)();
  // ... other stuff

}

  1. 一个间接函数调用比一个 if 条件调用更昂贵。

  2. 多个 if 条件比间接函数调用更昂贵。

  3. 此时担心速度是没有意义的:
    您正在等待用户的延迟,并且正在处理他可以查看的内容(即不会有大量的复选框)。像这样详细地优化每秒执行少于一百万次的代码是绝对没有意义的。

所以,我的建议是:不要再担心费用了if或在编写用户界面时调用函数。只在耗时的算法中考虑这些东西。

但是,如果您发现您确实使用了复杂的if/else梯子和/或switch内部循环中的语句,您可以通过用间接函数调用替换它们来优化。


Edit:
你说你每秒有 600 个检查。假设你只有一个if要处理的情况(情况if更快),如果不使用函数指针间接寻址,每秒可以“节省”大约 6 微秒,即运行时间的 0.0006%。绝对不值得付出努力...

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

If 语句与函数指针 的相关文章

  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • .NET 跟踪不适用于 Diagnostics.TraceSource,仅适用于 Diagnostics.Trace

    我正在尝试设置 NET 跟踪 我可以通过 System Diagnostics Trace 进行基本跟踪 但由于复杂的原因 我必须通过 System Diagnostics TraceSource 对象 自 NET 2 0 以来的新方法 激
  • 将带有百分比编码的 QUrl 转换为字符串

    我使用用户输入的 URL 作为文本来初始化 QUrl 对象 稍后我想将 QUrl 转换回字符串以显示它并使用正则表达式检查它 只要用户不输入任何百分比编码的 URL 这种方法就可以正常工作 为什么下面的示例代码不起作用 qDebug lt
  • 字节消息参数错误

    我无法弄清楚 字节 方法在抱怨什么 在下面的代码中 我尝试为我的客户端生成身份验证密钥 但我不断收到此错误 1 import hmac import hashlib import base64 message bytes Message u
  • 如何正确设置AppExecutionAlias以便可以从命令行启动程序?

    此 WPF 应用程序的 Package appxmanifest 已设置
  • 保护服务器上的 Breeze 以防止恶意更新外键

    问题 我只是想弄清楚在 Breeze 中保存更改时我需要在服务器端实现多少安全性 特别是 我正在考虑恶意用户如何手动破解 SaveChanges 请求 或破解客户端中的 javascript 以绕过我的正常业务规则 例如 恶意更改我的实体上
  • 如何启用 Google Vision API 在同一项目中访问 Google Cloud Storage Bucket

    我已将一些测试图像上传到 Google Cloud Bucket 但不想公开它们 这将是作弊行为 当我尝试对 Google Vision API 运行休息调用时 我得到 responses error code 7 message imag
  • .NET 捕获、分组、匹配之间的差异

    我正在使用 NET Regex 类型制作一个小型应用程序 而 捕获 分组和匹配 类型完全让我困惑 我从未见过如此丑陋的解决方案 有人能为我解释一下它们的用法吗 非常感谢 这是一个比 Dav 引用的文档中的例子更简单的例子 string s0
  • 如何在 PowerQuery 中引用单元格的值

    我有多个 Power Query 查询 我想将这些查询提供给 Excel 文件中的单元格的值 在本例中 为源文件名的完整路径 有什么办法可以将其导入到 Power Query 中吗 这可以使用 PowerQuery 中的命名范围和自定义函数
  • 如何使用 TryParseHtmlString 将十六进制转换为颜色(RGBA)

    如何使用十六进制值更改 Unity 中的按钮颜色 我尝试了这个 但它不起作用 也许我在这里犯了一个错误 btn image color ColorUtility TryParseHtmlString DADADAFF out color 您
  • 如何通过 PHP 获取页面正文中的 URL 参数?

    在 Drupal 站点上 为页面正文内容启用了 PHP 代码 如何在 PHP 代码中获取参数及其值 例如 我想得到ref and 33002 from http example com node 1 ref 33002 在下面的代码中 我可
  • RPres 中的代码框大小和字体大小

    我过去经常使用 knitr 和 beamer 来制作幻灯片 我现在在 R 演示文稿中注意到一件事 代码框和代码字体大小的动态大小似乎都丢失了 使用 knit beamer 我可以轻松地使用 size 参数更改字体大小 例如 size foo
  • 如何将单个反斜杠放入 ES6 模板文字输出中?

    我正在努力获取 ES6 模板文字来生成单个反斜杠及其结果 gt s s gt s s gt s s gt s s gt u005Cs s 通过检查 Node REPL 上的值 而不是使用打印它 使用 Node 8 9 1 和 10 0 0
  • ios:如何使用 StoryBoards 从 ViewController 打开选项卡栏控制器

    我正在这样做 并且想要从登录页面打开选项卡栏控制器 如果是第一次并且已经登录 然后传递登录页面并在 Spalsh 之后打开选项卡栏控制器 意味着如果用户第一次登陆应用程序 时间顺序应该是这样的 1 飞溅 2 登录页面 3 成功登录后 打开具
  • django forms:在单个表单中编辑多组相关对象

    我正在尝试做一些应该很常见的事情 以单一形式添加 编辑一堆相关模型 例如 Visitor Details Select destinations and activities Miami swimming clubbing sunbathi
  • Url 编码和 HTML 编码之间的区别

    和有什么区别网址编码 and a HTML 编码 HTML 编码对 HTML 文档中使用的字符串中的特殊字符进行转义 以防止与 HTML 元素混淆 例如更改
  • Python 异步任务排序

    我有一个关于python中的事件循环如何的问题asyncio模块管理未完成的任务 考虑以下代码 import asyncio asyncio coroutine def a for i in range 0 3 print a str i
  • JavaFX 中的 HTML 编辑选项

    我希望将基于 Swing 的应用程序中使用的 HTML 编辑器替换为基于 JavaFX 的编辑器 据我所知 有两种可能的选择 1 使用JavaFX HTML 编辑器 虽然这对于功能来说非常好does有 它仍然缺乏其他几个功能 例如插入图像
  • 移动应用程序的 OAuth2 流程

    我们有一个预先存在的移动应用程序 用户将注册他的用户名和密码 目前我们有一个基于自定义令牌的身份验证 我们希望在不影响用户体验的情况下切换到 OAuth2 看起来资源所有者密码凭证对我们来说是最接近的流程 但是有很多建议反对使用它们 任何其
  • 使用斯坦福 NLP 检测语言

    我想知道是否可以使用Stanford CoreNLP检测句子是用哪种语言写的 如果是这样 这些算法的精确度如何 几乎可以肯定的是 斯坦福 COreNLP 目前还没有语言识别功能 几乎 因为不存在更难证明 编辑 尽管如此 以下是间接证据 也没
  • If 语句与函数指针

    目标是根据复选框是否打开或关闭来更改事件循环中的行为 我能想到的最简单的方法就是每次运行循环时测试复选框状态 if statement void action void someLoop if checkboxTrue action oth