优快云 叶落归时雨 转载请注明出处
目录
- C++ 有关const int *p; int const *p; const int *p
- 对象中的const
1.C++ 有关const int *p; int const *p; const int *p
下面列举表格说明:
类型 | 解释 | 可否更改本身 | 可否更改所指向(引用)的变量 |
---|---|---|---|
const int n | n是常整型 | 否 | \ |
int const n | n是常整型 和上无任何区别,习惯使用上面 | 否 | \ |
const int *p | p是指向const int(常整型)的指针 | √ | 否 |
int const *p | p是指向int const(常整型)的指针 和上无任何区别 | √ | 否 |
int *const p | p是指向int(整型)的“常”指针 | 否 | √ |
const int *const p | p是指向const int(常整型)的“常”指针 | 否 | 否 |
const int &a | a是常(整型)引用 | 否 | 否 |
int const &a | a是常(整型)引用 和上无任何区别 | 否 | 否 |
总结
对含const类型的变量定义理解如下:
- 如果是变量或者引用:const 加在类型名前后无区别
- 如果是指针:
< 常类型限制 > type < 常类型限制 > * < 常指针限制 > 变量名
,加在 * 前表示常类型,加在* 后表示常指针。type前后均相同。
2.对象中的const
常数据成员
常数据成员和常量一样,是不能被修改的数据,在初始化时必须通过初始化列表初始化
常成员函数
某函数尾缀加上const,意味着该函数是不能对数据成员进行修改的。
简洁一点:常成员函数运行时,不能有修改数据的可能
eg:print函数,我们不希望他有修改数据成员的风险,因此 print()const{}
成了我们的选择
特点:
- 常成员函数能调用
常数据
和非常数据
,只要不改变数据即可 - 常成员函数不能调用非常成员函数,因为非常成员函数是可以修改数据的,使得数据在常成员函数运行时变化,这是不安全的
常对象
常对象要求对象建立时,对数据进行保护,不能通过常对象调用非常成员函数