c++const好文

https://www.cnblogs.com/jiabei521/p/3335676.html
引用自别的作者,只是学习分享,如有侵犯,请联系删除

<think>好的,用户想了解C++中的const作用。我得先回忆一下const的各种用法,然后组织一个清晰的解释。可能需要分点说明,每个作用都要有例子,这样用户更容易理解。首先,const的基础概念,比如修饰变量、指针、成员函数等。然后考虑不同的应用场景,比如函数参数、返回值、类成员。还要注意用户可能的疑问,比如const和宏定义的区别,或者与C语言中const的不同之处。需要确保例子正确,语法无误,同时用中简洁明了地阐述。可能还需要提到C++11后的constexpr,但用户没有问这个,所以简单带过即可。检查有没有遗漏的重要点,比如顶层和底层const,或者const在模板中的应用,不过作为基础介绍,可能不需要太深入。最后总结一下const的好处,比如增强代码可读性、安全性和优化可能性。确保回答结构清晰,符合用户的要求。</think>C++ 中 `const` 的作用详解(分层次说明): --- ### 一、核心作用:定义「不可变性」 `const` 关键字用于声明一个对象的值为常量,**强制编译器检查并阻止对它的修改**。 #### 1. 修饰变量 ```cpp const int MAX_SIZE = 100; // 必须初始化 // MAX_SIZE = 200; // 编译报错:不可修改 ``` #### 2. 修饰指针 - **指向常量的指针**(底层const): ```cpp const int* p = &MAX_SIZE; // 指针可改,指向的值不可改 int val = 10; p = &val; // ✅ 允许修改指针地址 // *p = 20; // ❌ 禁止修改指向的值 ``` - **常量指针**(顶层const): ```cpp int* const p = &val; // 指针不可改,指向的值可改 *p = 20; // ✅ 允许修改指向的值 // p = &x; // ❌ 禁止修改指针地址 ``` --- ### 二、函数中的关键用途 #### 1. 保护函数参数 防止函数内部意外修改外部变量: ```cpp void printArray(const int* arr, int size) { // arr[0] = 1; // ❌ 编译报错:受保护 } ``` #### 2. 常量返回值 避免返回值被修改(适用于返回指针/引用): ```cpp const string& getDefaultName() { static string name = "default"; return name; // 返回不可修改的引用 } ``` --- ### 三、类中的高级应用 #### 1. 常量成员函数 声明成员函数不会修改对象状态: ```cpp class Student { public: string getName() const { // ✅ 正确写法 // age++; // ❌ 禁止修改成员变量 return name; } private: string name; int age; }; ``` #### 2. 常量对象 只能调用常量成员函数: ```cpp const Student s; s.getName(); // ✅ 允许调用const函数 // s.setAge(); // ❌ 禁止调用非const函数 ``` --- ### 四、与宏定义的区别 | 特性 | `const` | `#define` | |-----------|-----------------------|-----------------| | 类型检查 | ✅ 严格类型检查 | ❌ 无类型检查 | | 作用域 | ✅ 遵循作用域规则 | ❌ 全局替换 | | 调试可见性 | ✅ 符号可见 | ❌ 预处理阶段替换 | --- ### 五、特殊注意事项 1. **C与C++的区别**: - C中 `const` 不是真正的常量(不能用于数组长度声明) - C++中 `const` 是编译期常量(可用于数组长度) 2. **与`mutable`配合**: ```cpp class Cache { public: int getValue() const { mutable_access_count++; // 即使const函数也能修改 return cached_value; } private: mutable int mutable_access_count; // 声明为可变 int cached_value; }; ``` --- ### 总结优势 1. **代码安全性**:减少意外修改风险 2. **接口清晰性**:明确函数/参数的行为约束 3. **编译器优化**:帮助编译器进行更好的优化 4. **可维护性**:增强代码自档化能力
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值