题目
const关键字在指针和引用中的使用
信息
- 类型:问答
- 难度:⭐
考点
const关键字,指针,引用,常量正确性
快速回答
const关键字在指针和引用中的主要用法:
- 常量指针:
const int* ptr表示指针指向的值不可修改 - 指针常量:
int* const ptr表示指针本身不可修改 - 常量引用:
const int& ref表示通过引用不能修改原始值 - 常量指针常量:
const int* const ptr表示指针和指向的值都不可修改
原理说明
const关键字用于定义不可修改的常量,在指针和引用中使用时:
- 位置决定约束对象:const在
*左侧时约束指向的数据,在右侧时约束指针本身 - 常量引用:避免拷贝开销的同时防止意外修改,常用于函数参数
- 常量正确性:确保不该修改的值不会被修改,提高代码安全性和可读性
代码示例
// 常量指针(指向常量的指针)
const int* ptr1 = &value;
// *ptr1 = 10; // 错误:不能修改指向的值
ptr1 = nullptr; // 正确:可以修改指针指向
// 指针常量(常量指针)
int* const ptr2 = &value;
*ptr2 = 20; // 正确:可以修改指向的值
// ptr2 = nullptr; // 错误:不能修改指针指向
// 常量指针常量
const int* const ptr3 = &value;
// *ptr3 = 30; // 错误
// ptr3 = nullptr; // 错误
// 常量引用
const int& ref = value;
// ref = 40; // 错误:不能通过引用修改值最佳实践
- 函数参数使用
const T&代替值传递,避免拷贝开销 - 成员函数后置const:
void func() const表示不修改成员变量 - 优先使用常量引用传递只读参数
常见错误
- 混淆
const int*和int* const的约束对象 - 尝试修改常量引用指向的值:
const int& ref = a; ref = b; - 将非常量指针赋值给常量指针时丢失const限定符
扩展知识
- 顶层const与底层const:顶层const(指针本身是常量)和底层const(指向对象是常量)
- const_cast:移除const属性,但需确保原始对象非常量
- 常量成员函数:只能调用其他const成员函数,不能修改成员变量