当前位置: 首页 > news >正文

C++ const 关键字解析

const 是 C++ 中用于定义常量或指定不可变性的关键字,它在不同上下文中有不同的含义和用法。下面是对 const 的全面解析:

1. 基本用法

定义常量

const int MAX_SIZE = 100;
const double PI = 3.14159;
  • 这些值在程序运行期间不能被修改

  • 必须在定义时初始化

与指针结合

const int* ptr1;        // 指向常量的指针(指针可变,指向的内容不可变)
int* const ptr2;        // 常量指针(指针不可变,指向的内容可变)
const int* const ptr3;  // 指向常量的常量指针(都不可变)

2. 函数中的 const

函数参数

void print(const std::string& str) {// str 不能被修改std::cout << str;
}
  • 防止函数内部意外修改参数

  • 对于大型对象,const 引用可避免拷贝

函数返回值

const int* getPointer() {static int value = 42;return &value;
}
  • 返回的指针不能用于修改指向的值

3. 类中的 const

const 成员函数

class MyClass {
public:int getValue() const {// 不能修改类的成员变量return value;}
private:int value;
};
  • 承诺不修改对象状态

  • 可以被 const 对象调用

const 数据成员

class Circle {
public:Circle(double r) : radius(r) {}
private:const double radius;  // 必须在构造函数初始化列表中初始化
};

4. constexpr (C++11 引入)

constexpr int square(int x) {return x * x;
}constexpr int val = square(5);  // 编译时计算
  • 表示值或函数可以在编译时计算

  • 比 const 更严格,所有 constexpr 都是 const

5. mutable 关键字

class Cache {
public:int getValue() const {if (!valid) {// 即使是在 const 成员函数中,也可以修改 mutable 成员cachedValue = expensiveCalculation();valid = true;}return cachedValue;}
private:mutable int cachedValue;mutable bool valid = false;
};
  • 允许在 const 成员函数中修改特定成员

最佳实践

  1. 默认使用 const 除非需要修改

  2. 对于函数参数,优先使用 const 引用传递大型对象

  3. 对于不修改对象状态的成员函数声明为 const

  4. 使用 constexpr 替代宏定义常量

const 的正确使用可以提高代码的安全性和可读性,是 C++ 编程中的重要概念。

http://www.dtcms.com/a/276504.html

相关文章:

  • windows 改用 nvm
  • 睿抗CAIP编程技能
  • AI 助力编程:Cursor Vibe Coding 场景实战演示
  • js二维数组如何变为一维数组
  • 数位动态规划详解
  • 顺序队列和链式队列
  • 淘宝商品评论API接口使用指南
  • 【C#】GraphicsPath的用法
  • Filament引擎(三) ——引擎渲染流程
  • Windows安装SSH
  • python库之jieba 库
  • 当大模型遇见毫米波:用Wi-Fi信号做“透视”的室内语义SLAM实践——从CSI到神经辐射场的端到端开源方案
  • 【Scratch】从入门到放弃(五):指令大全-九大类之运算、变量、自制积木
  • 下雨天的思考
  • 2025 XYD Summer Camp 7.10 筛法
  • Fusion: 无需路径条件的路径敏感分析
  • 端到端自动驾驶:挑战与前沿
  • Redis数据类型之set
  • 巅峰对决:文心4.5 vs DeepSeek R1 vs 通义Qwen3.0——国产大模型技术路线与场景能力深度横评
  • flowable或签历史任务查询
  • C++ Primer(第5版)- Chapter 7. Classes -001
  • 基于Java Web的二手房交易系统开发与实现
  • 利用docker部署前后端分离项目
  • 【QT】多线程相关教程
  • Linux中使用快捷方式加速SSH访问
  • 通俗范畴论13 鸡与蛋的故事番外篇
  • 2D转换之缩放scale
  • 《P2052 [NOI2011] 道路修建》
  • JavaScript:移动端特效--从触屏事件到本地存储
  • (LeetCode 面试经典 150 题 )3. 无重复字符的最长子串 (哈希表+双指针)