const修饰类型和变量
- 一、const常量一些注意点
- 1、声明时必须同时初始化
- 2、不可更改
- 3、与宏常量的区别
- 二、const修饰指针
- 1、常量指针constant pointer
- 2、常指向指针pointer-to-constant pointer
一、const常量一些注意点
1、声明时必须同时初始化
#include <iostream>
using namespace std;
int main() {
const int a; // 常量必须初始化,不然报错
return 0;
}
2、不可更改
int main() {
const int a = 0;
a = 1; // 不可更改,报错
return 0;
}
3、与宏常量的区别
- 发生时机:
宏常量在预处理
阶段处理;const常量在编译
阶段处理。
- 类型检查:
宏常量没有类型检查
,只是简单的文本替换;const常量有类型检查
,更安全。
二、const修饰指针
离指针变量p最近
的是const就是常量指针(constant pointer)(顶层指针);是*就是指针常量(pointer-to-constant pointer)(底层指针).指针常量这个翻译真迷惑人,这里的指针应该想表示指向吧,但翻译成常指向指针不好嘛。const离变量越近级别越高
,所以常量指针为顶层指针。
1、常量指针constant pointer
int* const p = &a; // 离p最近是const,所以p是常量,不可对p赋值
p = &b; // 不合法,不可对p赋值
*p = b; // 合法
2、常指向指针pointer-to-constant pointer
const int* p = &a; / int const* p = &a; // 离p最近是*,所以*p是常量,不可对*p赋值
*p = b; // 不合法,不可对*p赋值
p = &b; // 合法
参考
bilibili-c++