一、bool类型
逻辑型也称布尔型,其值为true和false,存储字节数在不同编译系统中可能不同,vc++中为1字节
0值为false,其他值转换后为true,在转换回int值为1
#include<iostream>
using namespace std;
int main(void)
{
bool result;
result = 100;
cout<<result<<endl; //输出:1
return 0;
}
二、const限定符
用const给字面常量起个名字(标识符),这个标识符就成为标识符常量:因为标识符常量的声明和使用形式很像变量,所以也称常变量;
定义的一般形式:
const 数据类型 常量名 = 常量值;
数据类型 const 常量名 = 常量值;
例如: const float PI= 3.1415926f;
注意事项:
常变量在定义时必须初始化;
常变量初始化之后,不允许再被赋值;
#include <iostream>
using namespace std;
int main()
{
//const int a; Error常量必须初始化
const int a= 100; //正确
//a = 200; Error常量不能重新被赋值
//常量指针
b=22;
const int * p; // const 在*左边,表示指针所指向变量为常量,经由*p不能更改指针所指向的内容
p = &b; // 正确
//*p = 200; // Error常量不能重新被赋值
//int * const p2; // Error常量必须初始化
int * const p2 = &b; // const在*右边,表示p2为常量;
int c= 100;
//p2 = &c; // Error常量不能重新被赋值
*p2 = 200;
count <<b<<endl; //输出: 200
return 0;
}
三、const和#define的区别
1.const 定义的常量存在类型;#define定义的常量没有类型;
2.const 定义的常量在编译的时候分配内存;#define定义的常量在预编译的时候进行替换,不分配内存;
3.作用域不同,const定义的常变量的作用域为该作用域的范围;#define定义的常量作用域为它的定义点到程序结束,可以使用#undef取消;
定义常量还可以使用enum,尽可能使用enum const替换#define;(inline)
高层次 const enum inline 替换#define;
底层框架 使用#define更加灵活
#include<iostream>
using namespace std;
#define STR(a) #a
#define CAT(a,b) a##b
int main(void)
{
int xy = 100;
cout<<STR(ABCD)<<endl; //#ABCD <=> "ABCD"
cout<<CAT(x,y)<<endl; //x##y <=> xy
return 0;
}
#define 定义的常量,容易产生副作用。
#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
int a= 5;
int b=0;
CALL_WITH_MAX(++a,b) //a被累加两次
CALL_WITH_MAX(++a,b + 10) //a被累加一次
在这里,调用f之前,a的递增次数竟然取决于他被拿来和谁比较;