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

C++ const关键字(八股总结)

作用

const修饰符用来定义常量,具有不可变性。

  1. 修饰变量,说明该变量不可以被改变;
  2. 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);
  3. 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;
  4. 修饰成员函数,说明该成员函数内不能修改成员变量。

指针常量和常量指针?

指针常量指的是该指针本身是一个常量,不能被修改,但是指针指向的对象可以被修改。

int a = 10;
int b = 20;
int* const ptr = &a; // 指针常量
*ptr = 15;           // 可以修改 a 的值
ptr = &b;            // 错误:ptr 是指针常量,不能改变指

常量指针指的是这个指针指向的对象是一个常量,不能被修改,但是指针本身可以被修改。

int a = 10;
int b = 20;
const int* ptr = &a; // ptr 指向 a
*ptr = 15;           // 错误:不能修改所指向的值
ptr = &b;            // 可以改变 ptr 的指向
类型指针是否可变指向的值是否可变定义方式
指针常量int* const ptr = &a;
常量指针const int* ptr = &a;

const修饰的函数能否重载?

onst修饰的函数可以重载。

const 修饰的成员函数与非 const 修饰的成员函数被视为不同的函数签名。编译器会根据调用时对象的 const 性来决定调用哪个版本的函数。

  • const 对象:无论是否是const成员函数都能调用,但是如果有重载的非const函数,非const对象会优先调用重载后的非const函数。
  • const 对象:只能调用 const 修饰的成员函数,也无法调用非const的成员函数;

示例代码

#include <iostream>
using namespace std;class MyClass {
public:void display() {cout << "Non-const display()" << endl;}void display() const {cout << "Const display()" << endl;}
};int main() {MyClass obj;          // 非 const 对象const MyClass constObj; // const 对象obj.display();        // 调用非 const 版本constObj.display();   // 调用 const 版本return 0;
}

输出:

Non-const display()
Const display()

宏定义 #define 和 const 常量 区别

宏定义 #defineconst 常量
宏定义,相当于字符替换常量声明
预处理器处理编译器处理
无类型安全检查有类型安全检查
不分配内存要分配内存
存储在代码段存储在数据段
可通过 #undef 取消不可取消
http://www.lryc.cn/news/516641.html

相关文章:

  • Linux 清楚历史命令
  • 服务器双网卡NCCL通过交换机通信
  • Redis哨兵(sentinel)
  • 小白学Pytorch
  • ros2笔记-2.5.3 多线程与回调函数
  • 第5章:Go语言错误处理和异常
  • 题库刷题知识点总结
  • GraphRAG:LLM之Graphrag接入milvus
  • adb使用及常用命令
  • omnipeek分析beacon帧
  • Java数组问题
  • salesforce 可以为同一个简档的同一个 recordtype 的对象设置多种页面布局吗
  • 使用vue项目中,使用webpack模板和直接用vue.config来配置相关插件 区别是什么,具体有哪些提现呢
  • 五、包图
  • 关于重构一点简单想法
  • kafka使用以及基于zookeeper集群搭建集群环境
  • GAN对抗生成网络(二)——算法及Python实现
  • 并发线程(21)——线程池
  • 基于32单片机的智能语音家居
  • VScode怎么重启
  • 分析服务器 systemctl 启动gozero项目报错的解决方案
  • 大模型LLM-Prompt-OPTIMAL
  • 3. 多线程(1) --- 创建线程,Thread类
  • 简单的jmeter数据请求学习
  • 智能水文:ChatGPT等大语言模型如何提升水资源分析和模型优化的效率
  • 民宿酒店预订系统小程序+uniapp全开源+搭建教程
  • 计算机网络掩码、最小地址、最大地址计算、IP地址个数
  • Mac中配置vscode(第一期:python开发)
  • 软件项目体系建设文档,项目开发实施运维,审计,安全体系建设,验收交付,售前资料(word原件)
  • 计算机网络--路由表的更新