1. 为什么const是C++程序员的必修课
十年前我刚接触C++时,曾天真地认为const只是个"装饰性"的关键字。直到在某个深夜调试一个指针越界bug时,才真正理解const的价值——它不仅是语法糖,更是构建健壮程序的基石。const的正确使用能预防50%以上的指针误操作问题,这也是为什么所有C++面试官都会揪着const问个不停。
const的核心价值在于编译期约束。与运行时检查不同,它能在代码编译阶段就捕获非法修改操作。现代C++代码库中,const的使用率普遍超过30%,在Qt等知名框架中甚至达到45%。这种"常量优先"的编程哲学,正是工业级代码与玩具代码的重要分水岭。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. const基础:从变量到指针的完全指南
2.1 常量变量的正确打开方式
const变量的声明必须伴随初始化,这是与普通变量的本质区别。以下典型错误90%的初学者都犯过:
cpp复制const int x; // 错误!未初始化
x = 10; // 错误!二次赋值
正确的做法是:
cpp复制const int MAX_BUFFER_SIZE = 1024; // 编译期常量
const auto current_time = std::time(nullptr); // 运行时常量
经验:对于编译期已知的常量,优先使用constexpr替代const,能获得更好的优化效果
2.2 指针与const的四种组合
指针与const的组合是面试高频考点,也是实际开发中最易混淆的点。通过内存访问权限的角度理解会清晰很多:
- 指向常量的指针(底层const):
cpp复制const int* p; // 不能通过p修改所指内容
int const* p; // 等价写法
- 常量指针(顶层const):
cpp复制int* const p = &x; // 不能修改p的指向
- 指向常量的常量指针:
cpp复制const int* const p = &x; // 既不能改指向也不能改值
- 非常量指针指向非常量:
cpp复制int* p = &x; // 没有任何限制
记忆技巧:从右向左读声明。
