C++中的布尔类型c++
- C++在C语言的基本类型系统之上增长了
bool
- C++中的
bool
可取的值只有true
和false
- 理论上
bool
之占用一个字节注意:数组
true
表明真值,编译器内部用1来表示spa
false
表明非真值, 编译器内部用0来表示指针C语言中:code
用整型值来代替
bool
类型,经常使用0:flase, 1:true
图片
C++作了类型加强,增长了一个很是严谨的bool
类型,true
和false
做为关键字存在。编译器
在C++的布尔类型中,bool
类型只有true
和false
两个值,C++编译器会将非0值转换为true
, 0值转换为false
。数学
bool b = 0; printf("b = %d\n", b); b++; printf("b = %d\n", b); b = b - 3; printf("b = %d\n", b); // bool类型是否支持数学运算?
其实在C++语言中,布尔类型的内部实现是用一个字节的整型来实现的,
bool
类型支持数学运算,编译器会在内部进行调整,非0为true,0 为 false
代码试验:it
#include <stdio.h> int main(int argc, char *argv[]) { bool b = false; int a = b; printf("sizeof(b) = %d\n", sizeof(b)); // sizeof(b) = 1, bool类型占一个字节 printf("b = %d, a = %d\n", b, a); 0 // b = 0, a = 0 b = 3; // b = 1 a = b; // a = 1 printf("b = %d, a = %d\n", b, a); b = -5; // b = 1 a = b; // a = 1 printf("b = %d, a = %d\n", b, a); a = 10; // a = 10 b = a; // b = 1 printf("a = %d, b = %d\n", a, b); a = 0; // a = 0 b = a; // b = 0 printf("a = %d, b = %d\n", a, b); return 0; }
布尔类型是C++中的基本数据类型io
- 能够定义
bool
类型的全局变量- 能够定义
bool
类型的常量- 能够定义
bool
类型的指针- 能够定义
bool
类型的数组......
C++中对三目运算符进行了升级
考虑下列代码是否正确,分别在C语言和C++环境中编译运行试验
int a = 1; int b =2; (a < b ? a : b) = 3; printf("a = %d, b = %d\n", a, b); // 在C语言中报错 // 在C++中,结果a = 3
三目运算符
C语言中的三目运算符返回的是变量值
- 不能做为左值使用
C++中的三目运算符能够直接返回变量自己
- 既能够做为右值使用,又能够做为左值使用
注意:
三目运算符可能返回的值中若是有一个是常量值,则不能做为左值使用
三目运算符只有在全部的可能返回都是变量的时候才能做为左值使用,一个常量一个变量就不能做为左值使用
C++对三目运算符进行了这样的升级,意义何在?
三目运算符全部的可能返回都是变量的时候,返回的就是变量自己,由此引出了新概念:引用
变量是一段实际连续存储空间的别名,程序中经过变量来申请并命名存储空间,经过变量的名字能够使用存储空间。
问题:一段连续的存储空间只能有一个别名吗?
C++中的引用
在C++中增长了引用的概念
- 引用能够看做一个已定义变量的别名
- 引用的语法:
Type& name = var;
int a = 4; int& b = a; // b做为a的别名 b = 5; // 操做b就是操做a注意:
普通引用在定义时必须用同类型的变量进行初始化。
C++对三目运算符作了些啥?
- 当三目运算符的可能返回都是变量时,返回的是变量引用
- 当三目运算符的可能返回中有常量时,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; // ok,返回a或b的引用,可做为左值 (a < b ? 1 : b) = 4; // err,返回1或b的值,不能做为左值
bool
类型是C++新增长的基础类型
bool
类型的值只能是true
和false
C++中的三目运算符可做为左值使用
C++中的引用能够看做变量的别名来使用
三目运算符的可能返回都是变量时,返回的是引用