c++-const限定符

用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使用形式很像变量,所以也称常变量
定义的一般形式:
const  数据类型 常量名 = 常量值;
数据类型  const  常量名 = 常量值;
例如:
const  float PI =3.1415f;
注意事项:
(1)常变量在定义时必须初始化
(2)常变量不能再初始化后重新赋值
const 与 #define 的区别
(1)const定义的常量有类型,而#define定义的没有类型,编译可以对前者进行类型安全检查,而后者仅仅只是做简单替换
(2)const定义的常量在编译时分配内存,而#define定义的常量是在预编译时进行替换,不分配内存。
(3)作用域不同,const定义的常变量的作用域为该变量的作用域范围。而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消
定义常量还可以使enum,在c++中尽量使用const(inline),enum替代#define
下面看一个程序:
#include <iostream>

using namespace std;

int main()
{
//常变量
	//const int a;                //error 定义常量必须要初始化
	const int a = 3;
	//a =4;                       //error 常量不能重新被赋值,值不能修改


//指针  const在*左侧,const修饰指针指向的内容,内容不能修改
	const int* p = &a;            //等价于//const int *p;
	                               //p = &PI;  
	//*p = 4;                      //error,*p是一个常量不能在初始化后赋值
	//int *p1 = &a;                //error,p1是 int *类型, &a是const int *类型


//指针   const在*右侧, const修饰指针,指针初始化后不能指向新的地址
	//int * const p2 = &a;            //error p2为 int * const类型, &PI为const int *类型
	int b = 100;
	//int * const p2;               //error p2为常量定义需要初始化
	int * const p2 = &b;
	*p2 =200;                       //ok
	cout<<b<<endl;                   //200
	int c=300;
	//p2 = &b;                       //error p2不能重新赋值

    const int  *p3 = &b;            //ok
	//*p3 = 200;                    //error *p3的值不能修改
	b=300;                          //ok
	cout<<b<<endl;           
	
	return 0;
}

一般在高层次编程中使用const,inline,enum代替#define,在底层编程中使用#define
下面通过一个例子简单介绍一个#define的使用:替换就代表这灵活
#include <iostream>

using namespace std;

#define STR(a) #a
#define CAT(a,b) a##b
int main()
{
	int x= 100, y=200,xy=300;
	cout<<STR(x)<<endl;              //#x<==>"x"
	cout<<CAT(x,y)<<endl;            //a##b <==>ab

	return 0;
}
下面介绍一个宏定义容易引起副作用的例子
#include <iostream>

using namespace std;

#define GET_MAX(a,b)  ((a)>(b)?(a):(b))
int main()
{
	int a= 5;
	int b=0;
	cout<<GET_MAX(++a,b)<<endl;        //7,a被累加了2次
	cout<<GET_MAX(++a,b+10)<<endl;     //10,a被累加了1次

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值