C++ bool、三目运算符、引用
bool变量:
C++相对于C语言加入了bool变量,其值为true(1) 和 false(0)。true表示不为零的数 false表示为零的数,占用一个字节的空间。
代码:
/* 编译环境
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Begin...\n");
bool a = false;
int b = 10; printf("bool size = %d\n",(int)sizeof(a));//打印bool变量的大小
/*a = 0 b = 10*/
printf("a = %d\t",a);
printf("b = %d\n",b);
/*a = 1 b=1*/
a = b;
b = a;
printf("a = %d\t",a);
printf("b = %d\n",b); /*a = 0 b=0*/
b = 0;
a = b;
printf("a = %d\t",a);
printf("b = %d\n",b); /*a = 1 b =10*/
b+=10;
a = b;
printf("a = %d\t",a);
printf("b = %d\n",b); /*a = 1 b=1*/
a +=10;
b = a;
printf("a = %d\t",a);
printf("b = %d\n",b); printf("End...\n"); return 0;
}
运行结果:

布尔变量是C++的基本数据类型,支持运算,这样做是为了兼容C语言。但是编译器会吧计算的结果还原成一个bool值。
可以定义为 常量、全局变量、常量、指针、数组...
C++对三目运算符的改进:
测试代码:
#include <stdio.h> int main(int argc, char *argv[])
{
printf("Begin...\n"); int a = ;
int b = ;
(a < b ? a:b) = ; //运行结果 b=10 a=5
//(a < b ? a:1) = 10; //将会报错
printf("a = %d\t",a);
printf("b = %d\n",b); printf("End...\n"); return ;
}
在 C语言编译器中运行结果

提示,左值错误
使用C++编译器

未报错 正常运行。

当 可能返回值中出现常量时,所报的错误与 C 中错误一致。
C 语言中 不允许 三目运算符为左值 。例如 (a<b ? a:b) = 10; 这样的写法 在C语言中是错误的。
C++中对三目运算符做出了增强,允许在三目运算符为左值,但是可能返回值种不能出现常量。因为常量不能等于另外一个常量。C++之所以能够这样操作是因为C++增加了一个“引用”的概念
C++对三目运算符做了什么了?
——当三目运算符的可能返回是变量的时候,返回的是一个引用。
——当三目运算符的可能返回是常量的时候,返回的是一个常量
C++的 引用:
测试代码:
#include <stdio.h> int main(int argc, char *argv[])
{
printf("Begin...\n"); int a = ;
int &b = a;
//int &b = 1; //报类型错误
//float &b = a;//报类型错误 printf("a = %d\t",a); //运行结果 a = b = 10 a的地址 = b的地址
printf("b = %d\n",b); printf("a = 0x%p\t",&a);
printf("b = 0x%p\n",&b); return ;
}
测试1:

a = 10; b = 10; 而且a 与 b的地址相同。
测试2:

证明:引用的类型不能是常量。
测试3:

由于C++语言是一个强类型的语言,对类型检查相当严格,所以使用一个float型的变量去 引用一个int 型的变量 是不允许的。
“引用”可以看成一个已经定义变量的 别名。引用语法 Type & name = var;
例如:int a = 5;
int &b =a;
b = 10;
上面的代码运行后,a = 10; b = 10; 而且a 与 b的地址相同。所以通过上述特性 在C++中一个变量是可以有多个 不同的名字的。(也就是说一个内存空间是可以有多个名字的,这个多个名字指向同一个内存空间)。
由于 C++是一个强类型语言,在对类型检查的过程中,如果类型不同将会报错。所以普通引用在定义时必须用同类型的变量进行初始化。
小结:
bool类型是C++增加的一个新的基础类型
bool类型的值只能是 false 或者 true
C++的三目运算符可以作为左值
C++的yiny可以看做变量的别名来使用
三目运算符的可能都是变量时,返回的是引用
C++ bool、三目运算符、引用的更多相关文章
- 2.C++中的bool类型,三目运算符,引用
本章主要内容: 1)bool类型 2)三目运算符 3)引用 1.布尔型bool 在C++中,bool类型只有true(非0)和flase(0)两个值,且bool类型只占用了一个字节. 例如: #inc ...
- 1.C和C++区别,以及const分析
从本章起开始从0学习C++,本章主要内容: 1)C和C++的基本区别 2)C和C++的const区别 1.C++和C区别 1.1 C++更强调语言的实用性,所有变量都可以在需要时再定义 比如: ;i& ...
- 转 C#String与string的区别
C#是区分大小写的,但是我却发现C#中同时存在String与string,于是我很困惑,于是我上网搜索了一下,于是我了解了一些小知识. MSDN中对string的说明:string is an ali ...
- C#基础笔记
第一章: 1.C#创建程序的基本结构 class 类名 { static void Main(string[]args) { } } 注意:1)namespace2)using3)类名命名规则:字母. ...
- c# string与String区别
[C#] String与string的区别:供参考 转自:https://www.cnblogs.com/rosesmall/p/8351808.html C#是区分大小写的,但是我却发现C#中同时存 ...
- 转 .net数据类型
.net 数据类型 short s=0; s = s + 1; 和short s=0; s += 1; 这两个表达式有什么区别,会报什么错误? 有区别吗??大家要想想呢还是要测试一下啊,我选择测试 ...
- C# 多线程之线程同步
多线程间应尽量避免同步问题,最好不要线程间共享数据.如果必须要共享数据,就需要使用同步技术,确保一次只有一个线程访问和改变共享状态. 一::lock语句 lock语句事设置锁定和接触锁定的一种简单方法 ...
- 第21课 shared_ptr共享型智能指针
一. shared_ptr的基本用法 (一)与unique_ptr的比较 比较 shared_ptr unique_ptr 备注 初始化 ①shared_ptr<T> sp; sp.res ...
- realsense SDK编译 release
1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------1> Checking Build System1> CMake does ...
- realsense SDK编译 debug
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
随机推荐
- AtCoder AGC037D Sorting a Grid (二分图匹配)
题目链接 https://atcoder.jp/contests/agc037/tasks/agc037_d 题解 这场D题终于不像AGC032D和AGC036D一样神仙了-- 还是可做的吧 虽然考场 ...
- Unity3D_(网格导航)简单物体自动寻路
NavMesh(导航网络)是3D游戏世界中用于实现动态物体自动寻路的一种技术,它将游戏场景中复杂的结构组织关系简化为带有一定信息的网格,进而在这些网格的基础上通过一系列的计算来实现自动寻路. 实现Ca ...
- Redis的一点笔记
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 优势: 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s . 丰富 ...
- python学习之路(19)
匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...
- JavaScript疑难杂症系列-事件
事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找) 什么是事件 在编程时系统内发生的动作 ...
- kotlin 简单处理 回调参数 加?
Kotlin Parameter specified as non-null is null 2017年10月18日 17:21:49 amiko_ 阅读数:9017 版权声明:本文为博主原创文 ...
- 第七周课程总结 & 实验报告(五)
第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...
- python3笔记十四:python可变与不可变数据类型+深浅拷贝
一:学习内容 python3中六种数据类型 python赋值 python浅拷贝 python深拷贝 二:python3六种数据类型 1.六种数据类型 Number(数字) string(字符串) L ...
- 云服务器搭建anaconda pytorch torchvision
(因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...
- web安全之如何防止CSRF跨站请求伪造(转载)
https://www.cnblogs.com/blibli/p/7658168.html CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click ...