底层与顶层const
- char const *p
const修饰的是*p,因此这是一个指向字符常量的指针,p指向的内存区域只读。底层const(修饰的是类型)
- char* const p
const修饰的是p,一个指向字符的常量指针,p内存区域只读,顶层const(修饰的对象,即变量本身)
- const char *p
修饰的是char,这是一个指向字符常量的指针,p指向的内存只读,底层const
- char **const p,
修饰的p,是一个字符的指针的指针常量,p本身只读,顶层const
- char* const *p
修饰的是*p,是一个指向字符的指针常量的指针,*p只读,底层const
加const构不构成重载
原博客
修饰参数:
如果是传值,不构成
如果是传指针,构成
修饰函数:
构成,影响是否能修改成员变量
const与static区别
const定义的叫常量, 它的编译方式是:编译过程中, 把出现常量名字的地方,用常量的值进行替换
区别:
面向过程 :
const
全局变量, 局部变量, 形参变量 ;
不能修饰函数
static:
全局变量,局部变量
可以修饰函数
面向对象:
const:
常成员变量,初始化必须写在构造函数初始化列表中
常成员方法:只能访问其他成员,不能修改。
常对象:普通对象和常对象都可以调用常方法,常对象只能调用常方法 ;
static:
static修饰全局变量使全局变量从 global符号变成 local 符号,因此只能当前文件可见,不参与链接过程;
static修饰普通成员变量,使普通成员变量从栈内存变成在.data或.bss 存储了,生命周期变长了.
修饰成员变量变成静态成员变量,必须在类外初始化,所有对象共享.
修饰成员方法变成静态方法不依赖于对象,通过类作用域访问,只能访问static成员变量