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

【C++】const关键字的作用及常见应用场景

一、核心作用

用于定义“常量”,限制程序对变量的修改,提升代码安全性和可读性。其核心作用包括:

  1. 避免误修改:明确标识不可变数据。
  2. 编译器优化:常量可被放入符号表,减少内存访问,优化执行效率。
  3. 类型检查:强制类型匹配(优于宏)。

二、应用场景及详解

1. 修饰变量

基本类型:值不可变

const int MAX_SIZE = 100;  // 必须初始化,后续修改触发编译错误
2.指针与引用
  • 常量指针(指向不可变)
const int* ptr
int const* ptr  //或
  • 指针常量(指针不可变)
int* const ptr
  • 双重常量(指针和值均不可变)
const int* const ptr
3. 修饰函数参数
  • 输入参数保护:防止函数内意外修改。
void print(const string& s) { 
    // s[0] = 'a';  // 错误!s为常量引用
}
4. 修饰函数返回值
  • 返回常量值:禁止对返回值赋值
const int getValue() { return 42; } // getValue() = 10; // 编译错误
5. 类中的const
  • 常量成员函数

     声明:void func() const;

     作用:承诺不修改对象状态

  • 常量对象:只能调用常量成员函数。
const MyClass obj;
obj.getX();  // 合法
// obj.modifyX();  // 非法

三.

1. C与C++中const的区别?

C中const默认为外部链接,可通过指针间接修改(未定义行为);

C++中const默认为内部链接,且严格禁止修改(符号表优化)

2. const#define的优劣?

const:类型安全、作用域控制、支持调试;

#define:无类型、易出错(可3能导致表达式错误)。

3. 常量成员函数能否调用非常量函数?

不能!违反“不修改对象”的原则,需保证调用链均为安全。

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

相关文章:

  • 【UCB CS 61B SP24】Lecture 14 - Data Structures 1: Disjoint Sets学习笔记
  • Android AOSP系统裁记录
  • SV基础(一):System Verilog与Verilog核心区别详解
  • SQL笔记#集合运算
  • 事务的4个特性和4个隔离级别
  • DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s
  • LabVIEW C编译支持工具库CCompileSupp.llb
  • android 新增native binder service 方式(三)
  • 系统思考:第五项修炼
  • 『obsidian』obsidian接入DeepSeek模型的完整说明
  • 神经网络 - 神经元
  • LangChain教程 - RAG - 支持的100种向量数据库
  • 九、数据治理架构流程
  • JSON 简介、语法、使用场景与 JavaScript 操作指南
  • 【时时三省】(C语言基础)常量和变量
  • 一文读懂:AIGC 在工业互联网产教融合实训平台的创新应用
  • 05-1基于vs2022的c语言笔记——运算符
  • sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现
  • NVIDIA DLI引领创新课程:基于提示工程的LLM应用开发探索
  • Bybit最大资金盗窃事件技术分析 by CertiK
  • 递归(典型算法思想)—— OJ例题算法解析思路
  • R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...
  • Java使用EasyExcel实现异步导出
  • JavaScript web APIs第一天——04-code——06-随机抽奖案例.html
  • 爱普生汽车用显示控制器IC:ScalerIC,汽车接口IC,相机接口IC
  • 如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式
  • 编写一个程序,输入一个字符串并输出其长度(Python版)
  • 网络安全 机器学习算法 计算机网络安全机制
  • MySQL高阶操作的详细步骤说明,结合了索引优化、事务管理、存储过程、触发器等核心功能
  • Spring源码分析の循环依赖