C++ const修饰符详解 【建议收藏】

举报
Linux猿 发表于 2021/09/30 14:59:13 2021/09/30
【摘要】 C++ const修饰符,有疑问欢迎交流~

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


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

1.修饰指针

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

    const int i = get_size();   //true
    const int j = 42;           //true
    const int k;                //false

(1)指针常量    

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

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

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

(2)常量指针

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

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

    int a = 10;
    int b = 299;
    int const *p = &a;
    p = &b;      // true
    a = 999;     // true
    *p = 300;    // false

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

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

    int a = 10;
    const int* const p = &a;

2.修饰数据成员

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

class Const_test{
public:
    Const_test(int v):value(v){
        
    }
private:
    const int value;
};

3. 修饰成员函数

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

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

class Const_test{
public:
    Const_test(int v):value(v){
 
    }
    void display()const{
        age = 10;   //错误
        int temp = 10; //正确
        temp = age;
        print();//错误
    }
    void dispaly(){//重载
 
    }
 
    void print(){
 
    }
 
private:
    int age;
    const int value;
};

4. 修饰类对象

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


🎈 有任何疑问欢迎交流!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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