在C语言中,const 修饰的变量依然被当做常量,在内存中依然有存储的空间,还可以通过指针间接修改内存空间的值
在C++中,C++把const看做常量,编译器会使用常数直接替换对值的引用
C++中的const机制类似C语言中的宏,都是替换,但是C++的const是在编译阶段替换,C语言的宏是在预编译阶段替换。
const修饰指针的三种情况:
1、指向常量的指针:指针指向一个常量对象,目的是防止使用该指针来修改指向的值
const int *p; // *p的值不能变,p可以变
int const *p; // 同上
2、常指针:将指针本身声明为常量,防止改变指针指向的位置
int *const p; // p不能改变,*p可以改变
3、指向常量的指针:常量指针指向一个常量对象
const int* const p; //都不能改变
const 修饰函数参数的三种情况:
1、值传递的 const 修饰传递,由于函数自动为形参临时复制实参值,实参不会改变
2、const 参数为指针时,可以防止指针被篡改
3、自定义类型的参数传参:需要临时对象复制参数,对于临时对象的构造,需要调用构造函数,比较浪费时间,因此用 const 外加引用传递的方法。