const关键字

1、const修饰变量

变成常量,值不可变。
C++默认设定下,const对象仅在该文件内有效。
若要共享,则需要加上extern关键字。

extern const a = 0;
2、const修饰指针(修饰更接近的部分)

int a=10; int * p = &a; int b=10;
p=&a 都为地址, *p=a 为保存在该地址的数据

1)常量指针:const int *p;

  • const 后为指针的值,所以指针*p的值不可以改
  • p为地址,可以改 (p=&b √)

2)指针常量:int * const p;

  • const 后为p(地址),所以p地址不可以改
  • *p为该地址的值,可以改 (*p=20 √)

3)const既修饰指针,又修饰常量:const int * const p

  • p 和 *p 都不可以修改

总结:const后的部分为常量,不能被修改

3、const修饰函数形参

参数的值在函数内不能修改

void fun(const &int a){}
4、const修饰函数返回值

const修饰函数的返回值,返回值不可直接修改,即

//fun()=8;  //不被允许

①修饰返回值为指针,则必须也用const修饰的变量来接收返回值,且不能对该值进行修
在这里插入图片描述
②const修饰返回值为普通类型 或 引用:

const int fun(){ return 1;}  
const int & fun(){ return 1;}  
//都不允许将fun()的值作为左值进行修改,以下会报错
//fun() = 8;  


//使用const变量,不能再对a值进行修改
const int a = fun();
//使用非const变量不会报错,也可再对改变其值
int a = fun();   a = 8;
5、const修饰类的成员函数

① 在该成员函数中,成员变量,都不可被修改。
(有个说法是static静态成员变量可以修改,但是如果运行该函数,是不被允许的,
报错:错误 LNK2001 无法解析的外部符号 “private: static int A::a” (?a@A@@0HA) )

class A {
	int fun() const {
		//p = 1;  //编译报错,不可对非static变量进行修改
		//a = 1;  //编译不报错,但运行出错,即也不可修改
		return p;
	}
	int p = 0;
	static int a;
};

② 对函数进行了重载(如果只有一个const函数,没有该非const函数,则不是重载)
const类对象只会调用const修饰的成员函数

class A {
	int fun() {
		return 0;
	}
	int fun() const {
		return 1;
	}
};

int main(){
    A a1;
    const A a2;
    cout<<a1.fun()<<endl;
    cout<<a2.fun()<<endl;
}
//输出0,1
6、const修饰类的成员变量

可直接初始化或以下方式:
类的成员变量可以分为静态的和非静态的,
修饰非静态的成员变量,可以在构造函数的参数对该变量进行初始化;
修饰静态的成员变量,则需要在类外对该变量进行初始化。
//只有静态变量才能在类外进行初始化

class A {
    //含参构造函数
	A(): p(1) {		
	}
	const int p ;
	const static int a;
};
const int A::a = 20;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值