const是C++中编译期契约,用于声明不可修改性以启用优化、保障类型安全、支撑const正确性;它约束访问路径而非绝对内存不可变,需区分顶层/底层const、合理使用const成员函数、mutable、const引用传参及constexpr协同。

const 在 C++ 中不是“只读变量”那么简单,它本质是编译期契约:告诉编译器“这个值/对象/接口不可被修改”,从而启用优化、增强类型安全、防止意外赋值,并支撑 const 正确性(const-correctness)这一核心设计原则。
声明时必须初始化;之后不可通过该标识符修改值。注意:它不保证内存绝对不可变(比如 const int* 指向的值仍可能被其他非 const 指针改),只约束当前绑定的访问路径。
const int x = 42; 或更符合 C++ 风格的 int const x = 42;(两者等价,后者强调“int 是 const 的”)const int* p; 表示“p 指向的 int 不可改”(底层 const);int* const p = &x; 表示“p 本身不可改,但指向的值可改”(顶层 const);const int* const p = &x; 二者都不可改const int arr[5] = {1,2,3,4,5}; 整个数组内容不可通过 arr 修改;但若用指针间接访问且原内存非 const,则仍可能绕过(不推荐)加在成员函数声明末尾(如 int get() const;),表示该函数不会修改 this 所指对象的任何非 mutable 成员。这是实现 const 对象调用、提升接口可读性和安全性的关键。
mutable int cache_hit_count;
const T& operator[] (size_t i) const; vs T& operator[] (size_t i);
传递大对象(如 string、vector、自定义类)时,优先使用 const T& 而非 T 或 T&,兼顾效率(避免拷贝)和安全性(防止误改)。
立即学习“C++免费学习笔记(深入)”;
void process(const std::string& s); —— 接收任意字符串(字面量、临时对象、const/non-const 变量),且不修改它func(const std::string& s) 可接受 func("hello");而 func(std::string& s) 不行C++11 起,const 是 constexpr 的必要不充分条件。constexpr 更进一步,要求表达式在编译期可求值,适用于数组大小、模板参数、static_assert 等场景。
constexpr int square(int x) { return x * x; } 要求所有实参也必须是常量表达式才能触发编译期计算const int x = rand(); 合法(运行时初始化),但不能用于需要常量表达式的地方;constexpr int y = 42; 既是 const,也是编译期常量constexpr Point p{1, 2};
基本上就这些。const 不复杂,但容易忽略细节——尤其在指针/引用层次、成员函数设计和参数传递策略上。真正掌握它,不是为了写满 const,而是让 const 成为你代码意图的自然表达。
以上就是c++++ const关键字的用法_c++ const修饰符使用场景全解【最佳实践】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号