C++ - const关键字

  1. 主要讲 const 的三种用法
    1. 用法1
    2. 用法2
    3. 用法3

C++ 学习笔记

C++ const 关键字

主要讲 const 的三种用法

用法1

  • 固定值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    #include <string>

    // 程序的主函数
    int main( )
    {
    const int a = 5;
    a = 3; // this is a error

    std::cin.get();
    return 0;
    }

用法2

  • 固定值 & 固定指针的指向
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>

    // 程序的主函数
    int main( )
    {
    // const int* a = new int;
    int const* a = new int; // 这种写法和上面的哪一种写法是一个意思
    *a = 3; // error 不可以修改值

    int temp = 34;
    int* const b = new int; // 表示指针的指向是 const, 但是内容可以变
    *b = 23;
    b = &temp; // error, 不可以修改指针的指向

    const int* const c = new int; // 表示指针的指向是 const, 但是内容可以变
    *c = 12; // error 不可以修改值
    c = &temp; // error, 不可以修改指针的指向

    std::cin.get();
    return 0;
    }

用法3

  • 配合 class 使用
  • mutable 关键字
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <iostream>

    class Entity
    {
    private:
    int m_X;
    int* m_Y;

    // 加入一个小插曲
    int* m_Z, m_M; // 这两个值中,第一个 m_Z 是指针,而第二个是 int 数,需要改成 int* m_Z, *m_M; 这样两个都是指针

    mutable int var ;
    public:
    // 这种 const 用法只可以在 class 的 function 中使用
    int GetX() const
    {
    m_X = 34; // error, 无法修改其值
    var = 1; // mutable 关键字修饰,就可以进行修改
    return m_X;
    }

    // 返回一个 int 指针,其指向 & 具体数值都不可以改变
    // 最后一个 const 表示无法在函数中修改值
    const int* const GetY() const
    {
    return m_Y;
    }

    int* GetZ()
    {
    return m_Z;
    }
    };

    // 此处函数对 e 进行只读操作,传入 const reference, 无需拷贝
    void Print(const Entity& e)
    {
    std::cout << e.GetX() << std::endl;
    std::cout << *e.GetY() << std::endl;
    std::cout << *e.GetZ() << std::endl; // error, 因为传入的 e 是 const,因此只只可以调用 GetX,GetY
    }

    // 程序的主函数
    int main( )
    {
    Entity e;

    std::cin.get();
    return 0;
    }

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qinhan_shu@163.com

文章标题:C++ - const关键字

本文作者:QinHan

发布时间:2019-12-26, 00:37:00

最后更新:2020-02-20, 05:42:12

原始链接:https://qinhan.site/2019/12/26/cpp-const/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏