【C++深度剖析学习总结】 4 C++中的布尔类型和引用
【C++深度剖析学习总结】 4 C++中的布尔类型和引用
作者 CodeAllen ,转载请注明出处
1.C++中的布尔类型
C++中的C语言的基本类型系统之上增加了bool //很多C语言项目bool其实是用int自定义的变量
C++中的bool可取的值只有true和false
理论上bool只占用一个字节
注意:
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
2.布尔类型的值
bool类型只有true(非0)和false(0)两个值
C++编译器会将非0值转换为true,0值转换为false
下面的代码输出什么?0,1,1 0(false), 1(true), -2(true)
bool b = 0;
printf(“b = %d\n”, b);
b ++;
printf(“b = %d\n”, b);
b = b - 3;
printf(“b = %d\n”, b);
4-1 布尔类型的使用
#include <stdio.h>
int main(int argc, char *argv[])
{
bool b = false;
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;
}
/*g++ 4-1.cpp
allen@allen-linux:~/code/C-Learn-Source-code$ g++ 4-1.cpp
4-1.cpp: In function ‘int main(int, char**)’:
4-1.cpp:8:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("sizeof(b) = %d\n", sizeof(b));
^
allen@allen-linux:~/code/C-Learn-Source-code$ ./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
*/
3.布尔类型
布尔类型是C++中的基本数据类型
可以定义bool类型的全局变量
可以定义bool类型的常量
可以定义bool类型的指针
可以定义bool类型的数组
4.三目运算符
C++对三目运算符进行了升级
测试一段代码
test.c
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n", a ,b);
return 0 ;
}
/*g++ test.c
test.c: In function ‘main’:
test.c:6:21: error: lvalue required as left operand of assignment
(a < b ? a : b) = 3;
*/
test.cpp
#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 ;
}
/*g++ test.cpp
a = 3, b = 2
*/
C语言中的三目运算符返回的是变量值,不能作为左值使用
C++中的三目运算符可直接返回变量本身,既可作为右值使用,又可作为左值使用
注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。
C++对三目运算符做了怎样的升级?这种升级的意义是什么?
所有可能的返回都是变量时,它返回的是变量本身,具体内容是C++的引用
4.C++中的引用
变量是一段实际连续存储空间的别名
程序中通过变量来申请并命名存储空间
通过变量的名字可以使用存储空间
问题:
一段连续的存储空间只能有一个别名吗?可以有其他别名
在C++中新增加了引用的概念
引用可以看做一个已定义变量的别名
引用的语法:
Type& name = var;
int a = 4;
int& b = a; //b为a的别名,a的类型为int,b的类型也为int
b = 5; //操作b就是操作a
注意:普通引用在定义时必须用同类型的变量进行初始化。
4-2 引用实验
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 4;
//int& b = a;
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;
}
/*
a = 5
b = 5
&a = 0x7ffe395c8cec
&b = 0x7ffe395c8cec
*/
当将改为float& b = a;
/*
4-2.cpp: In function ‘int main(int, char**)’:
4-2.cpp:7:16: error: cannot bind non-const lvalue reference of type ‘float&’ to an rvalue of type ‘float’
float& b = a;
^
4-2.cpp:12:25: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
printf("b = %d\n", b);
*/
C++对三目运算符做了什么?
当三目运算符的可能返回都是变量时,返回的是变量引用
当三目运算符的可能返回中有常量时,返回的是值
int a = 1;
int b = 2;
(a < b ? a: b) = 3; //正确,返回a或b的引用,可作为左值
(a < b ? 1: b) = 3; //错误,返回1或b的值,不能作为左值
小结
bool类型是C++新增加的基础类型
bool类型的值只能是true和false
C++中的三目运算符可作为左值使用
C++中的引用可以看做变量的别名来使用
三目运算符的可能返回都是变量时,返回的是引用
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/88563633
- 点赞
- 收藏
- 关注作者
评论(0)