一、布尔数据类型:
在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