2024年1月22日 ///昨天外面下雨地没干,骑车摔得好结实,,,
2024年1月23日 内容整理自The Cherno:C++系列
这个关键字确实有点难,看了好几遍原视频整理出来的知识框架,还需要加以练习
---------------------------------------------------------------------------------------------------------------------------------
(一)const在变量中的使用
-
字面常量
所谓字面常量,就是直接给出的数据,例如123、-56、1.414等等
-
符号常量
所谓符号常量,就是给字面常量取一个名称,于是在使用该常量的地方就可以直接使用这个名称来代替。例如,pi常常可以给3.141592653..取名,这样编写的程序可读性高。
const变量不可修改
上面是可以运行的;但如果把7行的int a=5修改成const,就会报错。
------------------------------------------------------------------------------------------------------------------------------
(二)const在指针中的使用
现在让我们在上述的基础程序上添加const关键字,以此来看看const究竟有什么用
1.const int * a=new int;
const int * a=new int;//这意味着你不能修改指针指向地址里变量的内容,但是可以改变指针a指向的位置
注意:const int *a=new int 这样的写法等价于int const * a=new int;
2.int * const a=new int;
int* const a=new int;//const加到*号之后意味着,不可以改变指针a的指向,但是可以改变a指向的内容
3. const int * const a=new int;
既不能改变指针指向的内容,也不能改变指针本身使其指向其他位置
-------------------------------------------------------------------------------------------------------------------------------
(三)类的成员函数加上const修饰符有两个作用
-
在const成员函数定义的地方,告诉编译器这个成员函数不应该改变数据成员的值
-
在调用const成员函数的地方,告诉编译器该成员函数不会改变对象数据成员的值
在程序运行的某个时刻,一个对象的所有数据成员的值反映了这个对象在该时刻的状态。
常常把对象的成员函数分为2类:
- 修改对象状态的成员函数(write)
- 获取对象状态的成员函数 (read)
从概念上讲,一个成员函数只要不修改对象数据成员的值,它就是一个获取对象状态的成员函数。但是,从实现的角度来讲,有时候因为疏忽,在实现一个获取对象状态的成员函数时无意中修改了数据成员的值,这时,如果把该成员函数当做获取对象状态的成员函数来使用,就会产生程序语义上的错误。
为了解决 上面的问题,C++提供了const成员函数机制,即,在定义一个成员函数时,可以为它加上一个const说明,表示它是一个获取对象状态的常成员函数(const member function)
上面的函数f()就是一个const成员函数,在其函数体中不能修改数据成员的值,如果在f中修改了数据成员的值,编译器会警告这个错误
---------------------------------------------------plus------------------------------------------------------------------------
const有点像类和结构体的visibility,
const是一个让我们的代码更干净的机制,并对开发人员写代码强制特定的规则,
const基本上就像你作出的承诺,
-----它承诺某些东西将是不变的,
something is going to be constant,that means it's not going to change.
(显然,你也可以在现实生活中打破你的承诺,但是我们更喜欢言出必行的人)
‘const’ is a promise,it promise something to be constant,which means it will not change,and whether or not to keep that promise is kind of up to you.
and the reason that we want to keep our promise is this can actually help to simplify our code a lot.
It actually has a lot of benefits.
---------------------------------------------------------------------------------------------------------------------------------