C/C++ const关键字

const关键字

1、与C中宏定义#define的区别

两者用来说明符号常量

不同点:宏定义不是真正的符号常量,它没有类型,不占用存储空间,只在程序中将宏定义符号替换为对应的值;const修饰的常量有类型,占用存储空间,可以用指针指向这个值,但不能被修改

2、修饰函数形参

若有函数typef_name(const int x);

则参数x在函数中就只能被使用,而不能被修改

3、const修饰指针变量

组合情况复杂,分为三种:

(1)指向常量的指针: const  类型名 *  变量名,如const int* p,可不初始化

指向常量的指针使指向的对象相对该指针而言为常量,指针本身不是常量;即该指针可以更换指向的对象,但是不可修改所指向的对象的值,如

int a=1,c=2;
const int * p;  //指向常量的指针
p=&a;   //合法
*p=10;  //非法,不可修改指向的对象的值
p=&c;   //合法,可更换指向的对象
//结论,指向常量的指针可指向非常量的变量,但是不可修改其值;

//又如
const char* p = "acbf";
p[2] = 'r';   //错误,不可修改它指向的对象
p = "abcfg";  //正确,可变更指向的对象

(2)常指针 :类型名* const  变量名,如 int* const p,必须初始化

指针本身是常量,通过该指针可以修改它指向的变量,但它不可指向其它对象,如

int a=0,b=2;
int *const p=&a;  //必须初始化
*p=10;   //合法
p=&b;    //错误,不可指向别的对象

//字符串
char *const p="jkagjkgklj"; //初始化
p[4]='h';  //合法,可修改指向的对象
p="sdfggdxcf";  //错误,不可指向别的对象

(3)指向常量的常指针:const  类型名* const  变量名,如 const int* const  p,必须初始化

指针为常量,指向的变量相对指针来说也是常量,即两者都是常量,如

int a=0,b=9;
const int* const p=&a;  //初始化
p=&b;  //错误,不可更改指向的对象,此时体现的是常指针的性质
*p=10; //错误,不可修改指向的值,此时体现的是指向常量的指针的性质

//字符串
const char* const p="sdgggasgwe"; //初始化
p="adgdgfdhfhs";  //错误,不可更改指向的对象,此时体现的是常指针的性质
p[5]=k;           //错误,不可修改指向的值,此时体现的是指向常量的指针的性质

PS:一般地,当声明中出现const描述符时,它修饰的是紧跟身后的声明元或在const成员函数声明中函数的this指针。

注意,可以将变量的地址赋给指向常量的指针,不会产生什么害处,但是,常量的地址不能赋给无约束的指针(常指针可修改其指向的对象,普通指针可修改指向的对象,故不可将常量的地址赋给常指针与普通指针)。如

int a=9;
const int c=7;
const int p1=&c; //引用,常量间互相引用合法,因为不会产生修改对象的操作
const int p2=&a; //常量引用变量,合法,因为不会对引用的对象产生修改操作
int* p3=&c;  //非法,c为常量,不可修改,p3为普通指针,可修改其指向的对象
int* const p4=&c; //非法,p4为常指针,可修改其指向的对象
const int* const p5=&c;

本文来源于书籍:《C++语言教程(第三版)》第二章2.6

4.const修饰类的成员函数

将const修饰的类成员函数称之为const成员函数。const修饰类成员函数,实际修饰该成员函数隐含的 this 指针,表明在该成员函数中不能对类的任何成员进行修改

 

普通类型的成员函数

const 类型的成员函数

普通对象

可以调用

可以调用

const 对象

不可以调用

可以调用

普通类型的成员函数

可以调用

可以调用

const 类型的成员函数

不可以调用

可以调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值