C/C++中各个位置的const关键字

Ⅰconst修饰函数

常函数 — 成员函数名后加const

常函数是个只读函数,具有如下特点:

① 不能改变类中的成员变量;

② 不能调用非const成员函数。

如果在编写该const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误,这就提高了代码健壮。

为什么通过值拷贝的方式捕获的外部变量是只读的?

按照C++标准,lambda表达式的operator()默认是const的,一个const成员函数是无法修改成员变量值的。
mutable 选项的作用就在于取消 operator () 的 const 属性。

【注意】普通成员函数才有常函数。

C++中构造函数,静态成员函数,析构函数,全局成员函数都不能是常成员函数。

① 构造成员函数的用途是对对象初始化,成员函数主要是用来被对象调用的,如果构造函数被设置成const,就不能更改成员变量,失去了其作为构造函数的意义。同理析构函数。

② 全局成员函数和静态成员函数static其函数体内部没有this指针,所以也不能是常成员函数

函数前加const

(1) 出现在返回值前面,函数返回值是一个常量。但是该返回值既可以赋值给一个常量,也可以赋值给普通变量

const int fun1(); //
int a; a=fun1();  // 正确,可以赋值给一个普通变量
const int b=fun1();  // 正确,可以赋值给一个常量

(2) 返回常内容指针,如const int *fun2( int &a ); 函数返回指针只可以赋值给常内容指针,不能赋值给普通指针。

const int *fun2( int &a );
int *q, c=5; 
const int *pValue; 
pValue=fun2( c );  	 // 正确,可以赋值给一个常内容指针
q=fun2(c); 			 // 错误,不可以赋值给一个普通指针

(3) **函数返回常指针。**与返回常量类似,可以将结果赋值给常指针、常内容指针或者普通指针

int * const fun3(int &a); 
int a=6;
int * const pValue = fun3(a);  	//正确,可以将结果赋值给常指针
const int *r=fun3(a); 			//正确,可以将结果赋值给常内容指针
int *q =fun3(a);				//正确,可以将结果赋值给普通指针

Ⅱ 修饰引用

遵循如下规则:
① 常引用可以是普通变量的引用;不能通过常引用来改变变量的值。

② 常引用也可以是常量的引用;一般引用不能作为常量的引用。

int a=3;
const int b=5;
const int &c=a; //正确,常引用可以是普通变量的引用,也可以是常量的引用。
const int &d=b; //正确,常引用可以是普通变量的引用,也可以是常量的引用
a=10;  			//正确
c=11;  			//错误,不能通过常引用来改变变量的值。
int &e=b; 		//错误,一般引用不能作为常量的引用

Ⅲ 修饰指针

常内容指针(不允许解指针)

例如 const char *pContent,是常内容指针;

指针变量所指地址的内容无法改变,但指针变量(指向地址)可以改变

char s1[100],s2[100];
const char *pContent=s1;
pContent=s2;  					 //正确,指针变量可以改变
pContent[0]='a'; *pContent='a';  //错误,指针变量所指内容无法改变

常指针

例如char const *pContent,是常指针;

指针变量所指地址的内容可以改变,但指针变量(指向地址)不能改变

char s1[100],s2[100];
char * const pContent=s1;
*pContent='a';  	//正确,指针变量所指内容可以改变
pContent=s2;  		//错误,指针变量无法改变

常内容常指针

例如const char* const pContent,是常内容常指针;

指针变量所指地址的内容不能改变,但指针变量(指向地址)也不能改变

har s1[100]="1234",s2[100];
const char* const pContent=s1;
s1[0]='a'; s2[0]='1';  
pContent[0]='x';  		//错误,指针变量所指内容无法改变
pContent=s2; 			//错误,指针变量无法改变
cout<<s1; cout<<s2  
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狱典司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值