定义变量
C:
局部const:栈区,可以通过指针修改
全局const:静态储存区,不能用指针修改,会报错,C/C++都不能修改
指针:
char* const ptr:常量指针,指针不能修改,ptr = astr;ptr = bstr;//报错,这个指针只能指这个常量(值)
const char* ptr:指针常量,这个类型的内容不能改,const char* ptr = "hello world";//指针指向的这块内存的值(hello world)不能修改,ptr[0] = 'a';//报错
C++:
会把变量加载到符号表中,可以用指针修改,只能在表中获取,但不一定成功
作用
1.避免修改
2.避免多次分配内存
#define var 100;//替换(编译期)
int a,b;
//都需要分配内存,本质是进行两次分配,100替换
a =var;
b = var;
----------------------------------------------
const int var = 100;
a = var;//只会分配一次,var是常量
b = var;
3.编译期可以进行类型检查,作用域检查,define只做替换,不会检查
修饰函数参数
void func(const T&a)//不能修改a的值
修饰函数返回值
//C++运算符重载
class A{
public:
const A operator+(const A&a){
//不希望产生a+b=c,返回值不能修改,不是左值,a+b作为左值,c赋值给a+b
}
};
类中常成员函数
确保不修改成员变量
class B
{
public:
void func() const{//常成员函数只能调用类的常成员变量
//常量对象,const修饰的对象时,常量对象只能访问常成员函数
}
void func(){}
};
//只读对象,只能调用常成员函数,不能调用非常成员函数
//常成员函数只能调用常成员变量以及常成员函数
作用:
1.避免修改成员变量
2.函数重载
B a;
a.func();
const B b;
b,func();