0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

c++ 之布尔类型和引用的学习总结

电子设计 来源:电子设计 作者:电子设计 2020-12-24 18:03 次阅读

一、布尔数据类型:

c语言里面我们知道是没有布尔数据类型的,而在C++中添加了布尔数据类型(bool),它的取值是:true或者false(也就是1或者0),在内存大小上它占用一个字节大小:

1、bool类型只有true(非0)和false(0)两个值。

2、C++编译器会将非0值转换为true,0值转换为false。

#include <stdio.h>

int main(int argc, char *argv[])

bool b = false;

int a = b;

printf("sizeof(b) = %d", sizeof(b));

printf("b = %d, a = %d", b, a);

b = 3;

a = b;

printf("b = %d, a = %d", b, a);

b = -5;

a = b;

printf("b = %d, a = %d", b, a);

a = 10;

b = a;

printf("a = %d, b = %d", a, b);

a = 0;

b = a;

printf("a = %d, b = %d", a, b);

return 0;

演示结果:

root@txp:/home/txp# ./a.out

sizeof(b) = 1

b = 0, a = 0

b = 1, a = 1

b = 1, a = 1

a = 10, b = 1

a = 0, b = 0

2、C++中的三目运算符:

对三目运算符,想必大家都再熟悉不过了,不过在c++中的三目运算符的用法就比c语言更加高级了,来先看一个示例:

int a = 1;

int b = 2;

( a < b) ? a : b = 3;

printf("a=%d,b=%d",a,b);

上面的三目运算符语句看起来怎么有点奇怪,它作为左值了,一般在c语言里面它应该是作为右值赋值给一个变量的,那这样写在c++中有没有错误,答案肯定是没有错的,我们还是来看一下这种写法在c语言中报了啥错误:

root@txp:/home/txp# gcc test.c

test.c: In function ‘main’:

test.c:7:21: error: lvalue required as left operand of assignment

( a < b) ? a : b = 3;

这里我们可以发现它不能做为左值来对它进行赋值,而我们在c++编译器里面来编译,很明显它是没有错误的,行的通,那我们再来修改一下:

#include <stdio.h>

int main(void)

int a = 1;

int b = 2;

( a < b) ? a : 4 = 3;

printf("a=%d,b=%d",a,b);

编译结果(这个错误和在c语言里面一样,注意这里我是在C++编译器里面编译,只是把三目运算符里面修改了一下。):

root@txp:/home/txp# g++ test1.cpp

test1.cpp: In function ‘int main()’:

test1.cpp:7:23: error: lvalue required as left operand of assignment

( a < b) ? a : 4 = 3;

小结:

1、c语言里面的三目运算符返回的是变量值,它不能作为左值来使用。

2、c++中的三目运算符可以直接返回变量本身,既可以作为右值使用,也可以作为左值来使用。

3、c++中的三目运算符可能返回的值中如果有一个是常量值,则不能作为左值进行使用,这点要切记和理解。

二、C++中的引用:

1、引用的概念:

--引用可以看作一个已定义变量的别名

--引用的语法:Type &name = var;这里举个简单的示例:

int a =4;

int& b =a; //b为a的别名

b = 5;//操作b就是操作a

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

下面是demo演示:

#include <stdio.h>

int main(int argc, char *argv[])

int a = 4;

int& b = a;

b = 5;

printf("a = %d", a);

printf("b = %d", b);

printf("&a = %p", &a);

printf("&b = %p", &b);

return 0;

演示结果:

root@txp:/home/txp# ./a.out

a = 5

b = 5

&a = 0x7fff408ffdec

&b = 0x7fff408ffdec

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可编程逻辑
    +关注

    关注

    7

    文章

    511

    浏览量

    43903
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72899
收藏 人收藏

    评论

    相关推荐

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    vlookup绝对引用和相对引用的区别

    绝对引用和相对引用是在Excel中使用VLOOKUP函数时的两种引用方式,它们的主要区别在于在填充公式时,引用的单元格地址是否会发生改变。 相对引用
    的头像 发表于 12-01 10:27 1215次阅读

    OpenHarmonyNAPI框架介绍

    ,引擎会将 javascript 下发的参数变量传递给 C++。所有从 JS 运行环境传递过来的变量都是用 napi_value 类型来表示的。需要通过 NAPI 接口转为 C++语言的变量
    发表于 11-23 15:36

    C/C++语言学习大全套

    电子发烧友网站提供《C/C++语言学习大全套.rar》资料免费下载
    发表于 11-18 14:33 0次下载
    C/<b class='flag-5'>C++</b>语言<b class='flag-5'>学习</b>大全套

    C++程序设计精简版

    总 目 录第 1 篇 基 本 知 识 第 1 章 C++的初步知识第 2 章 数据类型与表达式 第 2 篇 面向过程的程序设计第 3 章 程序设计初步第 4 章 函数与预处理第 5 章 数组第 6
    发表于 10-09 07:26

    实现Rust Trait类型 那么该类型引用也实现了trait吗?

    如果你在一个类型上实现了一个trait,然后引用了这个类型,那么类型引用也实现了这个trait吗?
    的头像 发表于 08-28 15:25 461次阅读

    C++中常用关键字详解(3)

    C++中,位域(bit fields)是一种特殊的数据结构,允许将结构体或类的成员变量按位进行分配。通过位域,可以有效地利用内存,节省存储空间,特别适用于表示布尔类型、标志位或其他不需要完整字节的数据。
    发表于 08-08 16:16 129次阅读

    C++ std::tie函数的作用和用法

    C++中std::tie函数的作用就是从元素引用中生成一个tuple元组,其在头文件中定义
    的头像 发表于 07-18 17:28 556次阅读

    NR RLC部分的学习笔记总结(一)

    之前或多或少有对PHY,MAC及PDCP部分进行了总结,现在开始的是NR RLC部分的学习笔记总结,RLC是很重要的一层
    的头像 发表于 07-17 17:50 1692次阅读
    NR RLC部分的<b class='flag-5'>学习</b>笔记<b class='flag-5'>总结</b>(一)

    C++可调用Callable类型总结

    自从在使用 std::thread 构造函数过程中遇到了 Callable 类型的概念以来用到了很多关于它的使用。
    发表于 07-17 14:04 284次阅读

    一起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    嵌入式-C++函数的重载

    一、什么是函数的重载 两个以上的函数,具有相同的函数名,通过参数的类型和参数的个数不同。编译器自行匹配,自动确定调用哪一个函数 二、函数重载的作用 C++允许功能相近的函数在相同的作用域内以相同
    发表于 06-28 13:54

    如何为xtensa编译C++

    我想为 xtensa 编译简单的 C++ 代码,但我不能。 代码:全选#include \"ets_sys.h\" #include \"osapi.h\"
    发表于 06-09 07:02

    C++入门之通用算法

    C++ 是一种强大的编程语言,它提供了许多通用算法,可以用于各种容器类型。这些算法是通过迭代器来操作容器中的元素,因此它们是通用的,可以用于不同类型的容器。在本篇博客中,我们将详细介绍 C++
    的头像 发表于 05-17 09:40 415次阅读

    找不到-l:S32K14x_AMMCLIB.a C/C++怎么解决?

    1.编译过程序中提示:说明资源路径方向设置类型 Ld错误:找不到-l:S32K14x_AMMCLIB.a C/C++问题
    发表于 05-09 09:50