在C语言中,其没有具体的布尔类型,选择用int代替,0表示假,1表示真。这样子显得不是特别严谨。
C++中的bool类型(bool是对C语言的类型的补充)
1)C++在C语言的基本类型基础上增加了bool;
2)C++中的bool可取的值只有true和false;
3)理论上bool只占用一个字节。
注意:
true代表真值,编译器内部用1来表示;
false代表非真值,编译器内部用0来表示;
bool类型只有true(非0)和false(0)两个值,C++编译器会将非0值转换为true,0值转换为false。
bool类型支不支持数学运算?
虽然说从概念上,C++提供了bool类型。但是内部实现还是用整型实现的。用一个字节整形来实现的。为了支持C语言,所以是支持数学运算的。计算后得到非0值(包括负数)转换为true,0值为false。
若有
bool b;
int a;
b = 3;
a = b;
printf("a = %d, b = %d\n", a, b);
这里的结果为a = 1;b = 1因为内部虽然为整型计算的到的,但是b非0,所以为1。所以a = 1。
这也就是说bool类型为0时,输出0;非0输出1。
布尔类型是C++中的基本数据类型:
1)可以定义bool类型的全局变量;
2)可以定义bool类型的常量;
3)可以定义bool类型的指针;
4)可以定义bool类型的数组。
C++对三目运算符的升级
下面的代码正确么?
#include<stdio.h>
int main()
{
int a = 2;
int b = 1;
(a < b ? a : b) = 3;
ptintf("a = %d, b = %d\n", a, b);
return 0;
}
三目运算符在C语言中不能当作左值来使用。在gcc编译.c文件时报错,g++编译.cpp文件时不报错。
C语言中的三目运算符返回的是变量值。(不能作为左值使用)
C++中的三目运算符可直接返回变量本身。(既可作为右值使用,又可作为左值使用)
注意:
1)三目运算符可能返回的值如果有一个是常量值,则不能作为左值使用。
2)所有的返回值都是变量时才能作为左值使用。
C++中的引用
引用可以看作一个已定义变量的别名。
语法为:(var是变量名)
Type& name = var;
例如:
int a = 4;
int& b = a; //b为a的别名
注意:
普通引用在定义时必须用同类型的变量进行初始化。(也就是说不能有 int& b;这样的情况)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 4;
int& 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;
}
通过引用的了解,可以知道C++对三目运算符做了什么。
其一是当三目运算符的可能返回都是变量时,返回的是变量引用;
其二是当三目运算符的可能返回中有常量时,返回的是值。
如图所示:
引用必须初始化。