C++的const关键字

在 C++ 中,const 关键字用于声明常量,表示某个变量或对象的值在初始化后不可改变。const 可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const 的各种用法:

1. 常量变量

const 可以用来声明常量变量,这些变量在初始化后不能被修改。

const int a = 10; // a 是一个常量,不能被修改
// a = 20; // 错误:不能修改常量

2. 常量指针

const 可以用于指针,表示指针所指向的数据是常量,或者指针本身是常量,或者两者都是常量。

  • 指针指向常量数据

    const int* p = &a; // p 指向常量数据,不能通过 p 修改 a
    // *p = 20; // 错误:不能修改常量数据
    p = &b; // 正确:可以改变 p 指向的地址
    
  • 常量指针

    int* const p = &a; // p 是常量指针,不能改变 p 指向的地址
    // p = &b; // 错误:不能改变常量指针的地址
    *p = 20; // 正确:可以修改 p 指向的数据
    
  • 常量指针指向常量数据

    const int* const p = &a; // p 是常量指针,指向常量数据
    // *p = 20; // 错误:不能修改常量数据
    // p = &b; // 错误:不能改变常量指针的地址
    

3. 常量引用

const 可以用于引用,表示引用所绑定的对象是常量。

const int a = 10;
const int& ref = a; // ref 是常量引用,不能通过 ref 修改 a
// ref = 20; // 错误:不能修改常量引用

4. 常量成员函数

const 可以用于成员函数,表示该成员函数不会修改类的成员变量。

class MyClass {
public:int getValue() const; // 常量成员函数
private:int value;
};int MyClass::getValue() const {return value; // 可以读取成员变量,但不能修改// value = 20; // 错误:不能在常量成员函数中修改成员变量
}

5. 常量参数

const 可以用于函数参数,表示传入的参数是常量,函数内部不能修改这些参数。

void print(const std::string& str) {// str = "Hello"; // 错误:不能修改常量参数std::cout << str << std::endl;
}

6. 常量表达式

C++11 引入了 constexpr 关键字,用于声明编译时常量表达式。

constexpr int add(int a, int b) {return a + b;
}constexpr int c = add(10, 20); // c 是编译时常量

7. 常量成员变量

const 可以用于类的成员变量,表示该成员变量在初始化后不能被修改。

class MyClass {
public:MyClass(int v) : value(v) {} // 初始化常量成员变量int getValue() const { return value; }
private:const int value; // 常量成员变量
};

总结

const 关键字在 C++ 中主要用于确保数据的不可变性,提高代码的可读性和安全性。合理使用 const 可以帮助编译器捕获潜在的错误,并使代码更加清晰和可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

ICM20948 DMP代码详解(100)

接前一篇文章:ICM20948 DMP代码详解(99) 上一回解析到inv_set_hw_smplrt_dmp_odrs函数的以下代码片段: // switch between low power and low noise at 500Hz boundaryif (minDly != 0xFFFF) {// above 500Hz boundary, force LN modeif (minDly==1) {if (s->base_state…

实测体验Claude 3.5升级版:AI首次实现直接操控电脑!

前言 就在10月22日晚上&#xff0c;Anthropic发布重大升级&#xff0c;发布Claude 3.5 Sonnet和Claude 3.5 Haiku新版本。 新的 Claude 3.5 Sonnet 在所有指标上都优于其他模型&#xff0c;包括 OpenAI 的 GPT-4 和谷歌的 Gemini 1.5 Pro。 Claude 3.5 Haiku 与之前的顶级 C…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了&#xff0c;关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方&#xff0c;但也有许多不相同的地方。接下来的C部分&#xff0c;我们主要是针对C与C语言不同的地方来与大家进行分享。其中…

gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件

结合 Logrus 和 Lumberjack&#xff0c;可以创建一个高效的日志中间件&#xff0c;用于记录请求和响应。以下是实现步骤&#xff1a; 1. 安装依赖 首先&#xff0c;确保安装了 Logrus 和 Lumberjack&#xff1a; go get github.com/sirupsen/logrus go get gopkg.in/natefin…

基于vite和vue3、 eslint、prettier、stylelint、husky规范

前言 在现代的前端开发中&#xff0c;代码规范非常重要。它可以提高团队的协作效率&#xff0c;减少代码错误&#xff0c;使代码更易于维护。为了实现代码规范化&#xff0c;我们可以使用一些工具来辅助我们的开发流程&#xff0c;包括eslint、prettier、stylelint、husky&am…

数据库表字段插入bug

瀚高数据库 目录 环境 BUG/漏洞编码 症状 触发条件 解决方案 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.1 BUG/漏洞编码 3355 症状 数据库安全版v4.5.1&#xff0c;安装包为&#xff1a;hgdb4.5.1-see-centos7-x86-64-20210804.…

word中的内容旋转90度

在vsto、Aspose.Words 中&#xff0c;默认没有直接的 API 可以让表格整体旋转 90 度。然而&#xff0c;我们可以通过一些方式来实现类似的效果&#xff0c;具体思路如下&#xff1a; 将表格插入到一个形状&#xff08;Shape&#xff09;或文本框中&#xff0c;然后旋转该形状。…

DVD光盘解密工具 Xreveal v2.7.1 官方版

下载地址 【1】https://pan.quark.cn/s/a95d5fa38f48 【2】https://drive.uc.cn/s/1e81ba7ee01e4?public1 Xreveal是一款功能相当贴心给力的光碟工具&#xff0c;其功能可以帮助用户检测以及删除DVD、CD保护。它完全不含有任何的解密密钥以及BD转换表&#xff0c;它是基于官…

redis高级篇之IO多路复用select方法简介 第174节答疑

1、bitmap最大1024位&#xff0c;一个进程最多只能处理1024个客户端 2、&rset不可重用&#xff0c;每次socket有数据就相应的位会被置位 3、文件描述符数组拷贝到了内核态(只不过无系统调用切换上下文的开销。(内核层可优化为异步事件通知))&#xff0c;仍然有开销。select…

003 优秀学员统计

003 优秀学员统计 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动&#xff0c;他们开展这项学习活动已经一个月了&#xff0c;所以想统计一下这个月优秀的打卡员工。每个员工对应一个id&#xff0c;每天的打卡记录当天打卡的员工的id集合&#xff0c;一共30天…

【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)

TOC 一、问题 重启电脑后&#xff0c;启用某个服务显示1089端口被占用。 查看是哪个进程占用了&#xff1a; netstat -aon | findstr "1089"没有输出&#xff0c;但是换其他端口&#xff0c;是可以看到相关进程的&#xff1a; 现在最简单的方式是给我的服务指定另…

解決爬蟲代理連接的方法

爬蟲在運行過程中常常會遇到代理連接的問題&#xff0c;這可能導致數據抓取的效率降低甚至失敗。 常見的代理連接問題 代理IP失效&#xff1a;這是最常見的問題之一。有些代理IP可能在使用一段時間後失效&#xff0c;導致連接失敗。 連接超時&#xff1a;由於網路不穩定或代…

阿里云项目启动OOM问题解决

问题描述 随着项目业务的增长&#xff0c;系统启动时内存紧张&#xff0c;每次第一次启动的时候就会出现oom第二次或者第n的时候&#xff0c;就启动成功了。 带着这个疑问&#xff0c;我就在阿里云上提交了工单&#xff0c;咨询为什么第一次提交失败但是后面却能提交成功尼&a…

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展&#xff08;AttributeModifier、AttributeUpdater&#xff09; Styles装饰器&#xff1a;定义组件重用样式   ;Extend装饰器&#xff1a;定义扩展组件样式   自定义扩展&#xff1a;AttributeModifier、AttributeUpdater 1.1. 区…

SpringBoot 下的Excel文件损坏与内容乱码问题

序言 随着打包部署的方式的改变&#xff0c;原本正常运行的代码可能带来一些新的问题&#xff0c;比如我们现在使用SpringBoot 的方式生成Jar包直接运行&#xff0c;就会对我们再在Resource下的Excel文件产生影响&#xff0c;导入与预期不符的情况发生cuiyaonan2000163.com 比…

Educational Codeforces Round 170 C New Game

思路 滑动窗口 排完序后找左右边界差值小于等于k 的最长子序列长度即可 可以用map去重 代码 #include <bits/stdc.h> using namespace std;const int N 200010;int t, n, k; int a[N], b[N];void solve() {cin >> n >> k;for (int i 1; i < n; i …

计算机网络的主要知识点小结

计算机网络是指将多台计算机通过通信线路连接起来&#xff0c;实现资源共享和信息传递的系统。 一、计算机网络概述 1. 定义和功能 - 定义&#xff1a;计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操…

Anchor DETR论文笔记

原文链接 [2109.07107] Anchor DETR: Query Design for Transformer-Based Object Detection (arxiv.org)https://arxiv.org/abs/2109.07107 原文笔记 What 提出了一种新的基于锚点的查询设计&#xff0c;即将锚点编码为对象查询。 Why 对象检测任务是预测图像中每个对象…

Python基础知识-异常处理篇

在Python中&#xff0c;异常处理是应对程序运行时错误的一种机制。它能帮助我们捕获和处理错误&#xff0c;防止程序崩溃。下面是异常处理的关键知识和实践示例&#xff1a; 1. 异常处理基础 Python中的异常处理使用 try, except, else, 和 finally 块来实现。 基本语法结构…