const关键字

  • const 修饰全局变量时会修改其链接属性为内部链接。如果想要覆盖这种链接可以使用extern关键字覆盖这种链接属性。例如
const int a = 1;//内部链接
extern const int a = 2; //外部链接

但不要轻易的这么做,因为C++设计全局常量为内部链接的是有原因的。假如你在一个头文件(假设为constant.h)中申明了一系列的常量,工程的其他文件下引用constant.h。若全局常量的链接性为外部的,那么将有一个只能有一个文件包含constant.h,如果有多个文件包含,则会产生重定义的错误。因此其他文件必须使用extern来引用这个头文件中的常量,造成不便。因此假如你要使得一个常量为外部链接的,需要注意到这一点

  • const关键字修饰指针
int* const p = &a;//指针不可修改
const int* p = &b;//指针指向的内存区域不可修改
  • const 修饰成员变量时,必须在头文件中声明时直接进行初始化
class A {
public:
    const int a = 2;
};
  • const修饰成员函数时,该函数内部不可以修改数据成员的值(mutable修饰的关键字除外)
class A {
public:
    void f() const {
    //  a = 2;//error
        int b = 2;//ok
        c = 4;//ok
    }
    int a;
     mutable int c = 3;
};

你可能感兴趣的:(const关键字)