const 关键字

目录

知识点

const作用

1. 基本注意事项

2. const出现的位置

引用中出现const

常引用和非常引用的转换(const T &和 T &是不同类型)

指针中出现const

函数中出现const

函数后出现const

3. const的合理使用

4. this指针的作用


知识点

  • const常量只是一个编译期间的常量。
  • const全局变量存储在全局存储空间,而且是只读的,因此试图修改会出现段错误。

const作用

  1. 他可以保护变量,防止它们被无意的修改。
  2. 它可以传达有效的信息给读你代码的人:这个变量是不能被修改的,或者这个函数不会修该对象的成员,等。
  3. const 关键字可以优化编译结果,让可执行程序更为紧凑。
  4. const 修饰的变量还可以写入 ROM 介质。

1. 基本注意事项

1)const 常量类型 常量名 = 常量表达式

const double PI=3.14;//常量、常指针、常函数
const char s[]="hello";//常数组

2) 常量是在程序执行过程中其值固定不变的内存单元的名字。在C++中常用const定义常量

注意事项

(1)必须在定义时进行初始化

#include <iostream>

using namespace std;

int main()
{
    const int n;//错误,常量n未被初始化;
    char *const p0;//错误,p0未被初始化;
    const int i=5;//正确;
    i=10;//错误,修改常量;
    i++;//错误,修改常量;
    return 0;
}

(2)C++中,表达式可以出现在常量定义语句中

#include <iostream>

using namespace std;

int main()
{
    int j,k=9;
    const int i1=10+k+6;//i1为25;
    const int i2=j+10;//i2未知,因为j不确定,虽然这样是对的,但是没有意义;
    return 0;
}

2. const出现的位置

  • 引用中出现const

int x=9;
const int &rx=x;//常引用x的值是可以改变的,但是rx引用是不能改变的,虽然改变x的值的同时改变了rx但是不能直接通过改变rx来改变其自身的值;

#include <iostream>

using namespace std;
int main()
{
    int x=9;
    const int &rx=x;
    x=4;//rx=4错误
    cout<<rx;
}
结果为    4
  • 常引用和非常引用的转换(const T &和 T &是不同类型)

不能把常量指针赋值给非常量指针,但是可以通过强制类型转换来进行赋值

const int *p1;
int *p2;
p1=p2;//ok;
p2=p1;//error;
p2=(int *)p1;//ok,强制类型转换;
  • 指针中出现const

(1)int *const p

int i=7,j=8;
int *const p=&i;//p是常指针不可变,i可变。所以p=&j是错误的;

如:

#include <iostream>

using namespace std;
int main()
{
    int i=7,j=8;
    int *const p=&i;
    i=j;//p=&j错误;
    cout<<*p;
}
结果为   8

(2)const int* p 等价 int const *p

int i=7,j=8;
int const *p=&i;//*p是指向常量的指针不可以改变,但是i可以变。*p不可以变,也就是说p值不可变;所以i=3是正确的;*p=4是错误的,因为改变了i的值

如:

#include <iostream>

using namespace std;
int main()
{
    int i=7;
    int const *p=&i;
    i=3;//*p=4错误;
    cout<<*p;
}
结果为    3
#include <iostream>

using namespace std;
int main()
{
    int i=7,j=8;
    int const *p=&i;
    i=3;
    p=&j;
    cout<<*p;
}
结果为     8

(3)const int * const p

const int const *p;//p指向常量的常指针
  • 函数中出现const

int f(int &px,const int &py);
int f(int x,const int y);
const int *f();//返回的常指针
*f()=2;//这样是错误的
const int &f();//返回的常引用;
void num(const char *p)//函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容;
  • 函数后出现const

函数不会修改任何数据成员,实际上函数后的const修饰的是隐藏参数this指针,this是当前对象的指针,this被修饰成this表明对象的数据成员不能被修改。

3. const的合理使用

  • const只修饰输入参数(非内部数据类型)

为了防止对输入参数进行修改,用const 修饰输入参数。

对于非内部数据类型的输入参数,将值传递改为引用传递可以提高效率。如void Func(A a) 改为 void Func(A &a)

对于非内部数据类型的输入参数,不要将值传递改为const引用传递,否则即达不到提高效率的目的,又降低了函数的可理解性。如void Func(int a) 改为 void Func(const int &a)

对于输出参数,用const修饰没有意义。

  • const修饰函数的返回值(返回值采用值传递,加const没有意义)

加const的函数返回值只能被赋给加const修饰的同类型指针。如const char* GetString(void);

错误:char* str = GetString();

正确:const char* str = GetString();

如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值

4. this指针的作用

http://c.biancheng.net/view/2226.html

参考:

https://blog.csdn.net/fighting123678/article/details/79487479

https://baijiahao.baidu.com/s?id=1619916909815372418&wfr=spider&for=pc

https://blog.csdn.net/wujunokay/article/details/90720808

https://www.cnblogs.com/azbane/p/7266747.html

http://c.biancheng.net/view/2226.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值