C++深度解析 布尔类型bool,三目运算符,引用&(3)

【C/C++】三目运算符的详细分析 C/C++ 三目运算符是一种极为简洁的条件运算符,它可以用于简化代码和提高代码的可读性。但在使用时,也需要注意适当地选择应用场景,避免过度使用导致代码可读性降低、复杂度增加和性能下降。在编写代码时,我们应该结合具体情况来选择适当的语句和运算符,以实现高质量的代码。 阅读详情

C++深度解析 布尔类型bool 和 引用&(3)

 

 

 

布尔类型 bool

在C++中,bool类型只有true(非0)和false(0)两个值,且bool类型只占用了一个字节。

true:非0,编译器内部用1来表示。

false:0 ,编译器内部用0表示。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = 0; //合法,兼容c语言特性,0代表false
       
    printf("b = %d\n", b);
    
    //bool类型支持数学运算
    b++;
    
    printf("b = %d\n", b);
    
    b = b - 3;
    
    printf("b = %d\n", b);
    
    return 0; 
}

结果如下:

分析:在C++中,遇到布尔类型bool时,将bool类型当成一个只占用1个字节的整形数。

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = false; //0
    int a = b;
    
    printf("sizeof(b) = %d\n", sizeof(b)); //1
    printf("b = %d, a = %d\n", b, a); //0, 0
    
    b = 3;
    a = b;
    
    printf("b = %d, a = %d\n", b, a); //1, 1
    
    b = -5;
    a = b;
    
    printf("b = %d, a = %d\n", b, a); //1, 1
    
    a = 10;
    b = a;
    
    printf("a = %d, b = %d\n", a, b); //10, 1
    
    a = 0;
    b = a;
    
    printf("a = %d, b = %d\n", a, b); //0, 0 
    
    return 0;
}

结果如下:

 

 

 

三目运算符

三目运算符即可作为右值使用,又可作为左值使用。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : b) = 3;    // a = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

结果如下:

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : 2) = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

结果如下:

三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。

意义:如果三目运算符的返回都是变量的时候,返回的是变量的本身。

 

 

 

引用

变量名的本质是存储空间的别名。

引用:已定义变量的别名

引用的语法:Type& name = var;

引用在定义时,必须初始化,且类型必须一致,初始化的值必须是变量,而非常量。

int a = 4;
int& b = a;    //b为a的别名
b = 5;         //操作b就是操作a,本质是将5赋值给a,a=5

注意:普通引用在定义时必须用相同类型的变量进行初始化。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    int& b = a;
    
    b = 5;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    //相同的地址,意味着a和b标识符代表内存同一段连续的空间
    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    
    return 0;
}

结果如下:

在C++,完全可以对同一段连续的内存,起任意多的别名。

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    float& b = a;
    
    b = 5;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    
    return 0;
}

结果如下:

因为C++是强类型的语言。引用b的类型 必须和 变量a要一样。

 

 

 

C++中对三目运算符

当三目运算符的可能返回都是变量时,返回的是变量引用

当三目运算符的可能返回中有常量时,返回的是值

int a = 1;
int b = 2;

(a < b ? a : b) = 3;  //正确,返回a或b的引用,可作为左值
(a < b ? 1 : b) = 4;  //错误,返回1或b的值,不能作为左值

 

 

 

小结

bool类型是C++新增加的基础类型

bool类型的值只能是true(非0)和false(0)

C++中的三目运算符可作为左值使用

C++中的引用可以看作变量的别名来使用

三目运算符的可能返回都是变量时,返回的是引用

 

 

c++-基本数据类型 1、使用bool关键字表示2、取值为true(真)或false(假)3、true对应1,false对应0。输出时用整数方式输出!表示对bool型进行逻辑非运算,用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。“!”(逻辑非)逻辑运算符。"逻辑非"就是指本来值的反值。例如:"!0" 这个逻辑表达式的值为1.(判断的这个数为0,成立,则其表达式的值为1)"!1" 这个逻辑表达式的值为0.(判断的这个数非0,不成立,则其表达式的值为0) 阅读详情

相关推荐

C++深度解析(3)—布尔类型和引用

1.布尔类型 1.1 布尔类型 C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool C++中的bool可取的值只有true和false 理论上bool只占用一个字节 true代表真值,编译器内部用1来表示 false代表非真值,编译器内部用0来表示 1.2 布尔类型的值 bool类型只有true(非0)和false(0)两个值 C++编译器会将非0值转换...

小虾米编程 2085

c++三目运算符详解

三目运算符是C++中常用的条件判断操作符,通过简洁的语法规则和灵活的应用场景,可以提高代码的可读性和简洁性。本文详细介绍了C++中的三目运算符的用法、语法规则以及常见的应用场景,并附带了相关的代码示例。本文将详细介绍C++中的三目运算符的使用方法、语法规则以及常见的应用场景,并附带代码示例,帮助读者更好地理解和应用三目运算符。其中,condition为条件表达式,expression1为满足条件时执行的表达式,expression2为不满足条件时执行的表达式。下面我们介绍一些常见的应用示例。

浪子回头 4153

C++ 布尔类型(bool)深度解析

在 C++ 编程里,布尔类型(`bool`)是一种基础且极为关键的数据类型。它专门用于表达逻辑值,在程序的条件判断、循环控制等诸多方面都发挥着重要作用。接下来,我们将对 C++ 中的布尔类型展开全面且深入的探讨。

轩宇的博客 2296

C++三目运算符

C++中的三目运算符(Ternary Operator)是一种简洁的条件表达式语法,用于在一个表达式中实现简单的条件判断。它的语法和使用场景非常简单但非常有用,尤其是在需要简化代码或进行条件赋值时。以下是关于C++三目运算的详细教学,包括嵌套使用和代码示例的讲解。

weixin_44259499的博客 5363

C++ 深度解析教程(二)进化后的const分析、布尔类型、引用的本质分析

C++中的const 注意:(为了兼容C语言)C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。

Exp.Joker 603

C++运算符分类深度解析:从单目、双目到三目,掌握优先级、结合性与实战避坑

运算符是编程语言中用于执行运算的基本符号,其设计直接关系到表达式的语法结构和求值逻辑。从原理上看,编译器依据操作数数量将运算符分为单目、双目和三目,并据此构建抽象语法树(AST)以确定求值顺序和生成机器指令。理解运算符的优先级和结合性对于编写正确、高效的代码至关重要,它能避免因表达式歧义导致的逻辑错误。在技术价值上,深入掌握运算符的语义(如自增/自减的前后缀差异、短路求值)不仅能提升代码性能,还能有效规避未定义行为(UB)等隐蔽陷阱。应用场景广泛,从基础的算法实现、条件判断到自定义类型的运算符重载,都离不开

weixin_33824363的博客 343

【C++深度解析】3、布尔类型和引用

1 布尔类型 C++ 中的布尔类型 C++ 在 C 语言的基本类型系统上增加了 bool bool 只占一个字节,可取的值只有 true(1)和 false(0) 编译器将非 0 值转换为 true,0 值转换为 false 看下面的代码,bool 类型可以进行算术运算吗?在 C 语言没有 bool 类型,用 int 类型的 0 和 1来表示,所以 C 语言中可以进行算术运算。C++ 为了兼容...

桑凯旋的博客 731

C++三目运算符:从表达式思维到高效编码实践

在C++编程中,条件判断是控制程序流程的基础。除了常见的if-else语句,三目运算符(条件运算符)提供了一种基于表达式的条件选择机制。其核心原理在于它是一个能产生值的表达式,而非仅仅执行分支的语句,这使其能无缝嵌入赋值、函数参数等需要值的上下文中。这种表达式思维带来的技术价值是代码的紧凑性和声明性提升,尤其在变量初始化、返回值选择等场景中,能实现一行代码完成条件赋值。从应用场景看,它非常适合逻辑简单、分支清晰且目标为获取单一值的场合,例如根据状态初始化配置、安全地提供默认值或在函数中简洁地返回不同结果。理

weixin_30908941的博客 340

第4课 布尔类型与引用

布尔类型 C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool C++中的bool可取的值只有true和false 理论上bool只占用一个字节 注意: true代表真值,编译器内部用1表示 false代表非真值,编译器内部用 0来表示 布尔类型的值 bool类型只有true(非0)和false(0)两个值 C++编译器会将非0值转换为true, 0值转换为false 下...

lzg2011的博客 203

C/C++布尔类型深度解析:从内存布局到实战应用

布尔类型作为编程语言中的基础数据类型,用于表示逻辑真值,其核心原理是将逻辑状态映射为二进制值。在计算机底层,布尔值通常以字节为单位存储,而非单比特,这涉及内存对齐与寻址效率的权衡。该设计在C/C++中具有重要技术价值,既保证了类型安全,又通过隐式转换与整型兼容,支持短路求值等高效逻辑运算。在实际应用场景中,布尔类型广泛用于条件判断、函数返回值、状态标志位,并深度参与STL容器特化与模板元编程。理解其内存表示与转换规则,能有效避免常见陷阱,提升代码健壮性。本文聚焦C/C++中bool类型的内存布局与隐式转换机

weixin_30086969的博客 246

C++原子布尔类型std::atomic_bool:原理、内存序与并发实战

在多线程编程中,数据竞争是导致程序行为不确定性的核心挑战之一。其根本原因在于多个线程对共享数据的非原子访问,破坏了数据的一致性。为了解决这一问题,现代编程语言引入了原子操作的概念,它保证了单个操作的不可分割性,从而成为构建线程安全程序的基础。原子操作的技术价值在于,它能够在无需传统互斥锁的情况下,实现高效的线程间同步,显著提升并发程序的性能。这一特性在操作系统内核、高性能服务器、无锁数据结构等对性能要求苛刻的场景中尤为重要。C++标准库通过`<atomic>`头文件提供了一系列原子类型,其中`std::at

weixin_34297704的博客 390

C++ bool 类型深度解析:从逻辑表示到内存优化

C++中bool类型深度解析:从基础原理到高效应用 本文全面剖析C++中的bool类型,揭示其作为逻辑状态抽象的本质特性。文章首先探讨bool与整数的转换关系及标准规范,随后深入分析其底层实现细节,包括1字节存储机制、内存对齐特性和位压缩优化技术。进一步阐述bool运算中的常见陷阱与性能优化策略,并针对不同场景提供实用解决方案:从基础状态标记到位掩码管理,从三态逻辑实现到强类型布尔设计。最后总结bool类型作为C++基础组件所体现的简洁与实用平衡,为开发者提供类型安全与性能优化的最佳实践指南。

互联网改遍了世界。 934

C++逻辑运算符深度解析:从短路求值到实战避坑指南

在编程中,逻辑运算符是构建条件判断和程序流程控制的基础工具,它们源于数字电路中的门电路原理,通过操作布尔值来实现复杂的决策逻辑。理解逻辑运算符的核心机制,如短路求值,不仅能提升代码的安全性,还能优化程序性能。短路求值特性允许在结果确定时提前终止计算,这在防止空指针解引用和数组越界访问等场景中至关重要。掌握逻辑运算符的优先级、结合性以及与位运算符的区别,有助于避免常见的编程陷阱。这些概念在C++等语言中广泛应用于输入验证、状态机设计和资源访问控制等工程实践,是编写健壮高效代码的关键。本文聚焦于C++中逻辑运算

weixin_30588675的博客 349

C/C++布尔类型深度解析:从底层实现到工程实践

在编程语言中,数据类型是构建程序逻辑的基础单元,其中布尔类型专门用于表示逻辑真值。其底层原理通常基于二进制1/0实现,编译器将其映射为内存中的特定字节模式,这直接影响内存布局和访问效率。这一设计的技术价值在于提升代码的类型安全性和可读性,使程序意图更加明确。在工程实践中,布尔类型广泛应用于条件判断、函数返回值、状态标志等场景,特别是在C/C++这类系统级语言中,理解其隐式转换规则和内存特性对编写高效、健壮的代码至关重要。本文聚焦于C/C++中bool类型的底层实现、逻辑运算优化以及常见陷阱,帮助开发者掌握这

weixin_33812433的博客 404

C++运算符重载:从语法糖到语义核心的深度解析与实践指南

运算符重载是C++实现用户自定义类型与内置类型平权的关键机制,它允许程序员为自定义类型定义运算符的行为,从而提升代码的可读性和表达力。其原理在于通过成员函数或非成员函数重载运算符,赋予类型特定的语义,如定义“相加”或“相等”的逻辑。这一技术在工程实践中价值显著,尤其在构建数学库、容器类或流处理系统时,能大幅降低使用者的学习成本,并增强代码的直观性。例如,在实现复数运算、矩阵计算或自定义日志输出时,合理运用运算符重载可使代码更贴近自然语言表达。本文聚焦于C++运算符重载的核心规则、实现技巧及常见陷阱,帮助开发

weixin_34393428的博客 388

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 257

C++运算符分类详解:单目、双目、三目运算符的核心原理与实战避坑指南

运算符是编程语言中用于执行运算或操作的基本符号,是构建程序逻辑的基石。其工作原理基于操作数的数量和类型,决定了表达式的求值顺序和最终结果。深入理解运算符的分类与特性,对于编写正确、高效且易于维护的代码具有至关重要的技术价值,它直接影响到算法实现、系统性能以及代码的可读性。在C++、Java、Python等主流语言的开发实践中,无论是进行基础的算术运算、逻辑判断,还是实现复杂的数据处理和算法优化,运算符都是不可或缺的核心工具。本文聚焦于C++中的**运算符分类**,特别是**单目运算符**和**双目运算符**

weixin_34101229的博客 397

关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one

纯粹,学术,热爱。 9402

仓颉基本数据类型深度解析

仓颉作为一门静态强类型语言,其类型系统的设计遵循"**安全优先、性能为重**"的原则。与动态语言相比,静态类型能在编译期捕获大量错误;与 C/C++ 等传统静态语言相比,仓颉又提供了更丰富的类型安全保障,避免了空指针、类型转换等常见陷阱。

2401_84966217的博客 1023

震坤行:企业 MRO 物料标准化革新之路

那产生这些问题的原因是什么呢?要想解决此问题,企业高层必须下定决心对历史数据进行梳理,并善于利用信息技术,融合企业管理的流程机制,建立起一套适合企业发展的物料标准化管理体系,循序渐进,逐步规避由物料不规范带来的管理问题,最终使得这套标准化体系能够满足企业多元化业务发展需要。国内某电子制造头部企业原先内部物料无对应分类,仅有物料编码,给企业对采购、领料的过程中造成极大的不变,基于震坤行的目录结构,预测物料对应的分类,预测准确率达到80%以上,再辅以人工校正,最终搭建起一套标准的目录体系,如图2.2所示。

carson99的博客 421

手把手教你用RTD2775QT/RTD2795QT打造4K便携屏:从芯片选型到Type-C一线通实战

本文详细介绍了如何利用RTD2775QT和RTD2795QT显示驱动芯片打造4K便携屏的全过程,包括芯片选型、硬件设计、固件烧录及Type-C一线通实战方案。特别针对新手常见问题提供了解决方案,帮助读者高效完成DIY项目,提升移动办公体验。

weixin_42520025的博客 711
上一篇: C++深度解析 进化后的const分析---const常量,只读变量,符号表,宏定义(2)
下一篇: C++深度解析 引用的本质分析 &(4)
mainn
博客等级 码龄10年 865粉丝 447原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值