0

0

C++布尔值与逻辑判断_C++布尔表达式执行规则

舞夢輝影

舞夢輝影

发布时间:2025-12-26 12:08:02

|

692人浏览过

|

来源于php中文网

原创

C++中布尔值仅true/false,非零即真、零即假;支持算术/指针等隐式转bool;&&和||短路求值;避免赋值误写、指针比true、浮点直接判等陷阱。

c++布尔值与逻辑判断_c++布尔表达式执行规则

在C++中,布尔值(bool)只有两个取值:truefalse,它们分别对应整数 1 和 0。但逻辑判断真正依赖的,不是变量类型本身,而是表达式求值后的“真值性”(truthiness)——即非零即为 true,零即为 false。

布尔类型与隐式转换规则

C++ 允许将任意算术类型、指针、枚举等隐式转换为 bool。转换规则非常简单:

  • 数值为 0(包括 0.0、'\0')→ 转为 false
  • 其他所有值(如 -1、0.001、非空指针、非空字符串首地址)→ 转为 true
  • 注意:bool b = 2; 是合法的,b 的值是 true,但 2 本身不会被保留——bool 只存 true/false,不存原始数值

逻辑运算符的短路求值(Short-circuit Evaluation)

逻辑与(&&)和逻辑或(||)采用短路策略:一旦结果确定,后续操作数不再计算。

  • a && b:若 a 为 false,则 b 不执行(哪怕 b 是函数调用)
  • a || b:若 a 为 true,则 b 被跳过
  • 这不仅是优化,更是关键行为——可用于安全检查,例如:ptr != nullptr && ptr->valid()

布尔表达式的常见陷阱

看似简单的判断,容易因类型混用或优先级出错:

剪映专业版
剪映专业版

一款全能易用的桌面端剪辑软件

下载

立即学习C++免费学习笔记(深入)”;

  • 赋值误写成相等:if (x = 5) 是赋值,永远为 true(除非 5 是 0),应写 if (x == 5)
  • 比较指针时用 == true 没意义:if (ptr == true) 实际等价于 if (ptr != 0),但可读性差,直接写 if (ptr) 更清晰
  • 浮点数慎用布尔上下文:double d = 0.1 + 0.2;if (d == 0.3) 很可能为 false,而 if (d) 虽安全但掩盖精度问题

推荐写法:清晰、安全、符合习惯

现代 C++ 强调意图明确。以下写法更健壮:

  • if (ptr) 代替 if (ptr != nullptr)(两者等价,前者更简洁)
  • 避免对 bool 变量再做 == true!= false,直接 if (flag)if (!flag)
  • 复杂条件拆解为带名变量,提升可读性:const bool hasPermission = user.level >= ADMIN && !user.isBlocked;

基本上就这些。C++ 的布尔逻辑不复杂,但隐式转换和短路特性容易忽略,理解清楚才能写出既正确又易维护的判断逻辑。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1428

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

221

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

69

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

703

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

516

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1428

2023.10.24

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.3万人学习

C 教程
C 教程

共75课时 | 3.7万人学习

C++教程
C++教程

共115课时 | 9.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号