isSet() 或运算符 void*() 或显式运算符 bool() 或其他什么?

2024-04-05

是什么最先进的关于函数检查值是否已设置?

例如,下面的迭代器解析单元格。 某些单元格包含值,其他单元格为空。

最方便的方法是什么?

struct iterator 
{                                  //usage:
  bool isset() const               // if (it.isset()) 
  bool isSet() const               // if (it.isSet()) 
  bool empty() const               // if (it.empty()) 

  bool is_set()   const            // if (it.is_set()) 
  bool is_valid() const            // if (it.is_valid()) 

  operator void*() const;          // if (it) 

  explicit operator bool() const;  // if ((bool)it) or if(it) //thanks @stijn
  operator          bool() const;  // if (it) //why not implicit conversion?

  bool operator!() const;          // if (!!it)

  //throwing exception as pointed out by @MatthieuM
  Type get() { if (isSet()) return value_; else throw; }
  //usage:
  //     try {                    // if (it.isSet()) {
  //        Type x = it.get();    //    Type x = it.get();
  //     }                        // }
  //     catch (...) {            // else {
  //        //empty               //    //empty
  //     }                        // }

  //please feel free to propose something different
  ...
};

反思:

  1. 我的老板不明白isset()=> 重命名为isSet()
  2. empty()更多的是关于容器收集,而不仅仅是一个单元格:(
  3. operator void*似乎是合乎逻辑的方式,但是在 C++11 流中已弃用 http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool
  4. explicit operator is 尚未支持 https://stackoverflow.com/questions/11365129/explicit-operator-bool-error(我的代码必须兼容旧的编译器)

我在读:

  • http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool
  • ( http://www.artima.com/cppsource/safebool.html http://www.artima.com/cppsource/safebool.html )
  • C++11 中的 safe-bool 习惯用法是否已过时? https://stackoverflow.com/questions/6242768/is-the-safe-bool-idiom-obsolete-in-c11
  • 安全 bool 习惯用法和显式运算符 bool 之间的不兼容性 https://stackoverflow.com/questions/9383282/incompatibilities-between-safe-bool-idiom-and-explicit-operator-bool
  • boost 中的安全 bool 习语? https://stackoverflow.com/questions/11781584/safe-bool-idiom-in-boost
  • 增强源代码...

void*有问题,因为它是一个有效的转换序列,但在某些情况下并非预期的。许多人在 C++03 中使用有时称为“安全布尔习语 http://www.artima.com/cppsource/safebool.html“其中您有一个包含私有类型的本地成员函数指针类型,因此没有人可以在您的类之外拥有它的实例。但是您可以返回它并至少检查 true/false。

当你使用C++11时,那么explicit operator bool这是可行的方法,因为它主要是针对这些情况而发明的。

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

isSet() 或运算符 void*() 或显式运算符 bool() 或其他什么? 的相关文章

  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • Java中有二进制文字吗?

    我想用二进制文字来声明我的整数 在Java中可以吗 在 JDK 7 中可以 int binaryInt 0b101 只需在您的号码前添加前缀即可0b
  • HornetQ 重启后不会保留消息

    我使用 HornetQ 作为队列提供程序 因为它具有持久性功能 但是 在我重新启动应用程序后 队列中的所有消息都会丢失 也许是配置问题 这是代码 Step 1 Create the Configuration and set the pro
  • Excel VBA 禁用快捷键有时会禁用数据输入

    为什么我的代码会随机偶尔禁用数据输入 但即使我隔离它并删除所有其他宏 大多数时间仍然可以工作 该代码禁用了几乎所有快捷键 但不应影响简单的数据输入 Option Explicit Rem mod ShortCutKeys Ctrl Alt
  • WebGet 的 WCF 响应格式

    WCF 为 ServiceContract 中的 WebGet 注释中的 ResponseFormat 属性提供了两个选项 ServiceContract public interface IService1 OperationContra
  • Drupal 6:打印纯正的主链接和所有子链接

    世界上怎么可能 我发誓 我读了相当于三本百科全书的书 却毫无用处 我已经尝试过区域 page tpl php 和块内的解决方案 他们都没有给我我需要的东西 而且我知道还有很多其他人也需要这个 我得出的结论是 我想打印出 page tpl p
  • 模糊除 div 之外的整个页面

    我有以下代码 除了中心的红色 div 之外 我需要将所有内容都模糊化 我尝试使用filter none or filter blur 0 但这行不通 如何模糊背景中除红色 div 之外的所有内容 编辑 我也尝试将它与 z index 一起使
  • iOS 11:蜂窝信号强度

    我正在获取蜂窝信号强度 iOS let statusBarView UIApplication shared value forKey statusBar as UIView if let foregroundView statusBarV
  • Spark:当我在 Range 中使用累加器时,它无法正常工作

    我不明白为什么 Spark 没有正确更新我的累加器 object AccumulatorsExample extends App val acc sc accumulator 0L acc sc range 0 20000 step 25
  • 在 C++17 中使用 const std::string& 参数是否有意义?

    通过得到string view在 C 17 中 我们得到了传递两者的廉价方法std string and char 不拥有字符串所有权并避免制作临时副本的函数 通过使用std string按值传递和std move我们可以显式且快速地传递右
  • 指定 NVCC 用于编译主机代码的编译器

    运行 nvcc 时 它始终使用 Visual C 编译器 cl exe 我怎样才能让它使用GCC编译器 设置CC环境变量到gcc没有修复它 我在可执行文件帮助输出中也找不到任何选项 在 Windows 上 NVCC 仅支持 Visual C
  • 为什么某些基本类型在 TypeScript 中不能传递赋值——它们是否按预期运行?

    本来想在 TypeScript 存储库的问题跟踪器中打开一个错误报告 我意识到我问了太多问题 所以我在错误报告之前在这里打开一个问题 带有相关代码的 Playground 链接 https www typescriptlang org pl
  • SecurityException - GoogleCertificatesRslt:不允许

    我们有一个拥有数百万用户的应用程序 在过去的一周里 我们从 Firebase Crashlytics 的旧版本应用程序中收到了大约 30 个 速度警报 其中包含如下错误消息 Fatal Exception java lang Securit
  • 使用按钮在打印机中打印 jLabel 的图标[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个带有图标的 jLabel 我想使用按钮在打印机 佳能 惠普 爱普生任何打印机 中打印该图标 我怎样才能做到这一点 有什么有用的代码
  • 在 MS Access 上与多个程序员一起工作

    您是否建议与多个程序员一起开发 MS Access 应用程序 我们的一款 MS Access 应用程序已经发展到了这样的程度 一名程序员无法在要求的时间范围内处理大量的更改 错误修复 和新功能 我们正在尝试使用 VBA 中未记录的 Save
  • 如何缩小自定义 Skobbler 离线地图应用程序的大小

    我正在将 Skobbler 地图集成到我的 iOS 应用程序中 目前 该应用程序的大小为 160Mb 这太大了 但我注意到已经集成了一堆地图 我想删除所有地图并让用户下载他需要的地图 现在 当我包含 SKMaps framework 时 其
  • Typescript 编译器突然开始生成错误

    我正在开发一个 Angular 2 项目 当我尝试运行打字稿编译器时 突然开始出现很多很多错误 有人可以建议从哪里开始搜索吗 我没有故意更改任何基本内容 即使当我从存储库克隆一个新副本时 错误仍然存 在 错误如下 node modules
  • Facebook SDK 3.1 - 错误:HTTP 状态代码:400

    自昨天 10 月 9 日起我已更新至 facebook SDK 3 1 后 我收到以下错误 错误 HTTP 状态代码 400 但就与 Facebook 连接而言 一切功能都完全正常 每次在我的应用程序上启动 Facebook 会话时 我都会
  • Rails 3 和图形数据库

    在 Postgresql 上运行的 Rails 3 应用程序需要切换到图形数据库才能成长 它们有很多 并且都提供不同类型的 API 主要是 REST 我深受启发talks http nosql mypopescu com post 3429
  • 如何使用 FFmpeg 在 C++ 中将 AVFrame 保存为图像

    在我的项目中 我想保存 Hevc 文件中的一帧 我在源代码中使用 FFmpeg 来解码 Hevc 文件并获取 AVFrame 和 AVCodecContext 我需要的是将框架保存为图片 全彩 我尝试将其保存为 pgm 文件 因此图片只是灰
  • isSet() 或运算符 void*() 或显式运算符 bool() 或其他什么?

    是什么最先进的关于函数检查值是否已设置 例如 下面的迭代器解析单元格 某些单元格包含值 其他单元格为空 最方便的方法是什么 struct iterator usage bool isset const if it isset bool is