C++ const修饰符

举报
Linux猿 发表于 2021/08/05 00:47:12 2021/08/05
【摘要】     const修饰符可以修饰指针、数据成员、成员函数和类对象。接下来分别进行解释: 1.修饰指针     const 对象一旦创建就不能改变,所以const对象必须初始化。可以是任意的表达式; const int i = get_size(); //true const int j...

    const修饰符可以修饰指针、数据成员、成员函数和类对象。接下来分别进行解释:

1.修饰指针

    const 对象一旦创建就不能改变,所以const对象必须初始化。可以是任意的表达式;


  
  1. const int i = get_size(); //true
  2. const int j = 42; //true
  3. const int k; //false

(1)指针常量    

    例如:int a = 10; int * const p = &a; 

     const 修饰的是p这个指针,所以是指针常量,指针的地址不能改变,但是指针的内容可以改变。


  
  1. int a = 10;
  2. int b = 299;
  3. int* const p = &a;
  4. a = 999; // true 可以通过原来的变量修改值
  5. *p = 100; // true
  6. p = &b; // false

 

(2)常量指针

 

    例如:int a = 10; const int *p = &a;(或 int const *p = &a;)

const 修饰的是其类型,指针指向的值不可改变,但是可以改变p的地址,因为p这里是一个变量。 


  
  1. int a = 10;
  2. int b = 299;
  3. int const *p = &a;
  4. p = &b; // true
  5. a = 999; // true
  6. *p = 300; // false

(3)指向常量的指针常量

    这个就比较简单了,地址和值都不能改变,如下所示:


  
  1. int a = 10;
  2. const int* const p = &a;

2.修饰数据成员

    修饰数据成员的时候,初始化只能在参数列表里,被const修饰的数据成员,不能被修改。如下代码所示:


  
  1. class Const_test{
  2. public:
  3. Const_test(int v):value(v){
  4. }
  5. private:
  6. const int value;
  7. };

3.修饰成员函数

    const放置的位置 : 函数声明之后,实现体之前。要求在声明和定义处都要有const修饰。const所修饰的成员函数能访问const和非const数据成员,但不能修改非const数据成员,只能访问const成员函数,不能访问非const成员函数。   

    构成重载:const对象只能调用const成员函数。非const成员对象,优先调用非const成员函数,若无,则可调用const成员函数。


  
  1. class Const_test{
  2. public:
  3. Const_test(int v):value(v){
  4. }
  5. void display()const{
  6. age = 10; //错误
  7. int temp = 10; //正确
  8. temp = age;
  9. print();//错误
  10. }
  11. void dispaly(){//重载
  12. }
  13. void print(){
  14. }
  15. private:
  16. int age;
  17. const int value;
  18. };

4.修饰类对象

    const修饰函数,是从函数层面,不修改数据。const修饰对象,是从对象的层面,不修改数据。只能调用const成员函数。

 

 

 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/80274726

推荐

华为开发者空间发布

让每位开发者拥有一台云主机

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。