c++ 关键字 const用法


const在c++中可以用来修饰内置类型变量, 自定义变量,成员函数,返回值,函数参数等。

1. const 修饰普通类型对象

const int a=6;//a是const对象
auto *cpa = &a;//auto 实际是const int* 类型
//不能直接给对象a赋值,也不能直接通过指针修改对象
a= 7;//错误
*cpa= 7//错误
//常量对象的指针不建议强转,通过转换后的指针去修改对象,虽然是合法的,
//但是会产生预料外的结果
int* pa=(int*)&a;
*pa=8;// a=8
int b= a+1;//b=7

2. const 修饰指针对象

const修饰指针变量有三种情况:

  1. const修饰指针指向的内容, 内容为不可变量
  2. const修饰指针,则指针为不可变量
  3. const修饰指针和指针指向的内容,二者皆不可更改
//第一种情况
const int a=6;
const int* pa= &a;
*pa=8//错误,指针指向的对象不可更改
pa++ //正确,指针移动sizeof(int)个字节
//第二种情况
int a=6;
int* const pa= &a;
*pa =8;// a=8
int b=9;
pa= &b;//错误,指针不可以改变
//第三种情况
int a=9;
const int* const pa= &a;//地址和值都不可以改变

当const位于* 左边, 值不可以改变,指针可以改变;
当const位于* 右边, 指针不可以改变,值可以改变;

3. const 修饰类成员对象

const修饰类成员对象时,需要在初始化列表中构造成员对象,不能在构造函数体内赋值

class A {
public:
	const int& r;
private:
	const int a;
};
A::A(int i):a(i),r(i){}//正确,属于构造初始化
A::A(int i){r=i; a=i;}//错误,属于赋值

4. const 修饰普通函数

void fun(const int a);//值传递的const修饰,也可不加const
void fun(const int& a);//防止函数体内修改 a 的值
void fun(const int* p);//防止函数体内修改p指向的值
void fun(int* const p);//防止函数体内修改p指针
const int fun();//等同于 int fun()
const int* fun1();//返回指针

5. const 修饰类成员函数

  1. const 修饰类成员函数,其目的是防止成员函数修改被调用对象的值
  2. const 的成员函数只能调用类的成员函数
void Test::fun() const{}//

注意:(1) const关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针,即不能实例化,const成员函数必须具体到某一实例。
(2) 如果一个类的两个成员函数,返回值、函数名、参数列表完全相同,其中之一是const,则重载。因为 常成员函数的参数传入this指针是const Class*类型的,参数不同,导致函数签名不同。

void Test::fun(){}
void Test::fun() const{}//this 指针是const Test*

(3) 非只读对象(如a1)调用某个函数(如 disp()),先找非const版本,如果没有,再调用const版本。而常对象,只能调用类中定义的常函数,否则编译器报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值