使用布尔值来表示整数

2024-04-13

在c++中,bool用于表示布尔值。也就是说它成立或成立。但在某些情况下我们也可以使用 bool 来表示整数。 是什么意思bool a=5; in c++?


“是什么意思bool a=5;在 C++ 中?”

其实就相当于写

bool a = (5 != 0);

“但在某些情况下,我们也可以使用 bool 来表示整数。”

并不真地。这bool仅值代表用于初始化它的整数是否为零(->false)或不(->true).


反过来(如@丹尼尔·弗雷的评论 https://stackoverflow.com/questions/30332082/using-boolean-to-represent-integers/30332119?noredirect=1#comment48759151_30332119) false将被转换回整数0, and true会变成1.
所以原始整数值(或任何其他表达式结果,如指针,此外nullptr, or double值不完全正确代表0.0 https://stackoverflow.com/questions/4020582/treating-double-variable-as-boolean) 会迷路。


结论

正如中提到的LRiO 的回答 https://stackoverflow.com/a/30332269/1413395,不可能存储除false or true in a bool多变的。

不过,有保证的转换规则(引自cppreference.com http://en.cppreference.com/w/cpp/language/implicit_cast):

安全布尔问题

在 C++11 中引入显式转换函数之前,设计一个应该可在布尔上下文中使用的类(例如if(obj) { ... })提出了一个问题:给定一个用户定义的转换函数,例如T::operator bool() const;,隐式转换序列在该函数调用之后允许一个附加的标准转换序列,这意味着结果 bool 可以转换为 int,允许这样的代码obj << 1; or int i = obj;.

一个早期的解决方案可以在std::basic_ios,它定义了operator! and operator void*(直到 C++11),这样的代码如if(std::cin) {...}编译是因为void*可转换为bool, but int n = std::cout;无法编译,因为void*不可转换为int。这仍然允许无意义的代码,例如删除std::cout;编译,许多 C++11 之前的第三方库都是用更复杂的解决方案设计的,称为安全布尔习语 http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool.

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

使用布尔值来表示整数 的相关文章

  • ASP MVC4 - 通过视图模型传递列表以查看

    我有一个模型人物 其中包括出生日期等字段 我想将所有人的列表以及每个人的计算年龄传递给视图 因此 视图模型 public class vm PersonList public Person Person get set public int
  • 当用户与 DateTimePicker 控件交互时会引发什么事件?

    我是 C 新手 在我的程序中使用 DateTimePicker Value Changed 事件 但我发现当用户单击箭头时发生 ValueChanged 事件 或者如果也以编程方式更改值 我只想识别 DateTimePicker 的用户交互
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • 通知另一个线程数据可用的最快方法是什么?有什么替代旋转的方法吗?

    我的一个线程将数据写入循环缓冲区 另一个线程需要尽快处理该数据 我本来想写这么简单的spin 伪代码 while true while a i do nothing just keep checking over and over proc
  • 类模板的可变参数构造函数模板的特化

    这是一个带有可变参数构造函数的类 它专门用于从临时对象进行复制和移动 template
  • 使用正在运行的进程的共享内存收集核心转储

    核心转储仅收集进程空间 而不收集为进程间通信创建的共享内存 如何使核心转储也包含正在运行的进程的共享内存 设置核心文件过滤器 proc PID coredump filter per http man7 org linux man page
  • 将迭代器取消引用到临时范围时出现非指针操作数错误

    Using auto empty line auto str return str size 0 我们做得到 auto line range with first non empty ranges view drop while range
  • 如何找到 QDockWidget 标题栏的高度?

    我正在尝试找到 a 的高度QDockWidget标题栏 以便对自定义布局进行一些智能调整大小 但标题栏不是单独的小部件 它内置于停靠小部件的私有布局中 并且没有成员可以访问它 还有其他方法可以找到它的高度吗 是的 您可以使用以下命令找到标题
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 引用计数指针的STL类?

    这应该是微不足道的 但我似乎找不到它 除非不存在这样的类 智能指针的 STL 类 或类集 是什么 UPDATE 感谢您的回复 我必须说我很惊讶没有标准实施 我最终使用了这个 http archive gamedev net referenc
  • 使用 PrimarySearcher.FindAll() 时出现内存泄漏

    我也有一个使用插件和应用程序域长时间运行的服务 并且由于使用目录服务而出现内存泄漏 请注意 我正在使用 system directoryservices accountmanagement 但据我了解 它使用相同的底层 ADSI API 因
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • gcc总是做这种优化吗? (公共子表达式消除)

    作为示例 假设表达式sys gt pot atoms item gt P kind mass在循环内求值 循环只改变item 因此表达式可以简化为atoms item gt P kind mass通过将变量定义为atoms sys gt p
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两
  • C/C++ 特殊 CPU 功能的使用

    我很好奇 新的编译器是否使用了新 CPU 中内置的一些额外功能 例如 MMX SSE 3DNow 所以 我的意思是 在最初的 8086 中甚至没有 FPU 所以旧的编译器甚至不能使用它 但新的编译器可以 因为 FPU 是每个新 CPU 的一
  • SoapHttpClientProtocol:以流而不是字符串的形式获取响应?

    我正在使用一种网络服务 它可以一次性输出大量数据 响应字符串可能约为 8MB 虽然在台式电脑上这不是问题 但嵌入式设备在处理 8MB 字符串对象时会发疯 我想知道是否有办法以流的形式获取响应 目前我正在使用如下方法 我尝试使用 POST 请
  • 从原始 URL 获取重定向 URL

    我的数据库中有一个表 其中包含一些网站的 URL 我必须打开这些 URL 并验证这些页面上的一些链接 问题是某些 URL 被重定向到其他 URL 对于这样的 URL 我的逻辑是失败的 有什么方法可以传递原始 URL 字符串并获取重定向的 U
  • 如何检查多个变量是否等于同一值?

    如何比较多个项目 例如 我希望检查所有变量 A B 和 C 是否都等于字符 X 或所有三个变量都等于 O 如果其中 2 个为 X 1 个为 O 则应返回 false I tried if A B C X A B C O Do whateve

随机推荐