C++ - mutable关键字

C++ 学习笔记

C++ mutable

  • 总的来说 mutable 有两种用法,让我们来看看

用法1

  • 用于修饰 class 的成员变量,使其在const函数中也可以修改
    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
    #include <iostream>
    #include <string>

    class Entity
    {
    private:
    std::string name;
    mutable int count = 0; // 用于记录GetName函数被调用类多少次
    public:
    const std::string& GetName() const
    {
    count++; // 这个函数为const, 如果 count 不是mutable, 则不可以++
    return name;
    }
    };

    // 程序的主函数
    int main( )
    {
    const Entity e;
    std::cout << e.GetName() << std::endl;

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

用法1

  • 配合 lambda 使用
  • lambda 表达式用于定义并创建匿名的函数对象
  • 这个不怎么用得到
    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
    #include <iostream>
    #include <string>

    class Entity
    {
    private:
    std::string name;
    mutable int count = 0; // 用于记录GetName函数被调用类多少次
    public:
    const std::string& GetName() const
    {
    count++; // 这个函数为const, 如果 count 不是mutable, 则不可以++
    return name;
    }
    };

    // 程序的主函数
    int main( )
    {
    const Entity e;
    std::cout << e.GetName() << std::endl;

    int x = 8;
    auto f = [=]() mutable
    {
    x++;
    std::cout << "Hello" << std::endl;
    std::cout << x << std::endl;
    };

    f();
    // x=8; 上面函数是对x的一个拷贝

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