const关键字
2018-08-14 本文已影响0人
_gentle
- 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;
};