const 关键字
const修饰符是让一个变量只读,即不可修改,而且必须在创建的时候就进行初始化。但是实际在C语言中,用const修饰的变量也可以通过指针的方式修改。并且常量类型只能使用常量指针来获取地址。
const 变量
const int x = 10;
// x不能被赋予新的值
// x = 20; // 这会导致编译错误
const 指针
int value = 10;
const int* ptr = &value; // 指向常量的指针
// *ptr = 20; // 这会导致编译错误,因为ptr指向的是const数据
int const* ptr2 = &value; // 另一种语法,与上面的含义相同
在这个例子中,ptr是指向常量整数的指针,不能通过ptr修改其指向的数据。
如果我们声明指针本身为常量,那么就不能改变指针指向的地址:
int value1 = 10;
int value2 = 20;
int* const ptr3 = &value1; // 指向int的常量指针
// ptr3 = &value2; // 这会导致编译错误,因为ptr3本身是const的
*ptr3 = 30; // 这是合法的,因为ptr3指向的数据不是const
const 函数参数和返回类型
void printValue(const int value) {
// value在函数内不能被修改
std::cout << value << std::endl;
}
const 成员函数
class MyClass {
public:
int getValue() const {
// 这个成员函数不能修改任何成员变量
return m_value;
}
private:
int m_value;
};
const 与宏的区别
编译时刻:宏是预编译阶段编译;const是编译阶段编译
编译检查:宏不做检查,不会报错误,只是替换,const会编译检查,会报编译错误