cpp learning

有时候,我们想在函数或者类里面定义一些常量,这时候,就需要用到 const 关键字了。const 起到了标记的作用,我们不能直接修改常量的值,但是可以通过指针来修改常量所在内存的值。所以 const 实际上只是起到明确代码的作用。

修饰数据类型

  1. 非指针

    const int MAX_AGE = 90;
    

    如果你想修改 MAX_AGE 的值,会提示编译错误。

  2. 指针

    int a = 1;
    const int* p1 = &a;
    int const* p2 = &a;
    int* const p3 = &a;
    const int* const p4 = &a;
    

    p1 和 p2 都是只能修改指针值,不能利用指针修改 a 的值。

    p2 不能修改指针值,但是可以修改 a 的值。

    p4 既不能修改指针值,也不能修改 a 的值。

修饰函数

  1. 只读函数

    int getX() const
    

    你不能在 getX 函数里面对类的数据成员进行修改,因此要养成习惯,如果某函数是只读的,就应该添加 const 关键词。

  2. 只读参数

    void print(const Type& t)
    

    参数加了限定词 const ,因此你不能对 t 的数据成员做任何的修改,如果你调用了自身的函数修改变量也是不允许的。& 符保证了传参不需要复制,提高程序速度。

  3. 返回只读指针的只读函数

    如果需要查看类里面的指针数据成员,可以这样写。

    const int* const getP() const
    

    这样就保证了在函数里面不会被修改,传出去之后也不会被修改。

如果我们想在只读函数里面修改一个数据成员也是可以的。使用关键字 mutable

class Entity{
  mutable int var;
  int x;
public:
  int getX() const 
  {
    var = 2;
    return x;
  }
};

如果不加 mutable ,那么 getX 函数就不能对 var 进行赋值。