【C++】002、const关键字使用

C++-强制类型转换 在 C++语言中新增了四个关键字 static_cast、const_cast、reinterpret_cast 和 dynamic_cast。这四个关键字都是用于强制类型转换的。我们逐一来介绍这四个关键字。 static_cast 在 C++语言中,static_cast 用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。 //在C语言中的强制转换 int a = 10; int b = 10; double result = (double)a / (dou 阅读详情

一、概念

  • const关键字在C++中不只是表示常量,他的核心是只读契约

二、const五大常见用法

1、基本常量

  • 用于替代#define

  • 特点:编译器常量,有类型检查,比宏安全

const int SIZE = 20;

2、const与指针

  • 根据const与指针符号*的前后位置,记忆口诀: 左定值,右定向

1)、指向常量的指针
  • const在*左边,定值

  • 特点:值不能改,但指针可以改(是顶层const)

const int* p = &a; 
*p = 10; // 错❌️ 
p = &b; // 对✅️

2)、常量指针
  • const在*右边,定向

  • 特点:指向不能改,但值可以改(是顶层const)

int* const p = &a;
*p = 10; // 对✅️ 
p = &b; // 错❌️

3)、指针常量指针
  • 既不能修改值,也不能修改指向

const int* const p = &a;

3、const引用传参

  • 函数的参数使用const进行修饰

  • 优点:

    • 避免拷贝,传递引用

    • 防止参数被修改,const保护作用

    • 可接受临时变量 printData("hello");

void printData(const std::string& str) { }

4、const成员函数

  • 在成员函数声明末尾加const,表示该函数不会修改任何非静止成员(变量mutable成员除外)

  • 特点:const对象只能调用const成员函数

class Student {
private:
    mutable int cache_hits; // 即使const函数也可以改
    int age;
public:
    // const成员函数内,this被隐式视为 const Student* const this
    int getAge() const { 
        // age = 10; // ❌ 编译报错
        cache_hits++; // ✅ 允许,因为mutable
        return age; 
    }
};

5、const修饰函数返回值

  • 返回引用防止返回值修改

const Student& getStudent() { return stu; } // 返回引用防修改
const int getValue() { return 1; }          // 防止 (a = getValue()) = 3 这样的左值赋值操作

三、指针常量、常量指针与 指针int* 的相互赋值

  • 底层const (const int *),规定指向的值不能改变,赋值给int*后,约束破坏了,他可以修改对象的值

  • 顶层const (int* const), 指向的指针不能改变,但是对象值可以改变,不受影响

四、constexpr与const的区别

  • const是运行时常量,只读契约

  • constexpr是编译器常量。

【002】C++ 语言核心:关键字深度解析与分类指南 auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。 阅读详情

相关推荐

Avalonia使用CefNet 实现web-browsers(基于CentOS8 Arm64架构)

Avalonia使用CefNet 实现web-browsers(基于CentOS8 Arm64架构)

confused_kitten的博客 3803

C++面向对象编程:从类与对象到static、const关键字深度解析

面向对象编程(OOP)是一种将数据与操作数据的方法捆绑在一起的编程范式,其核心思想是通过封装、继承和多态来构建模块化、可复用的代码。在C++中,类作为对象的蓝图,定义了数据成员和成员函数,而对象则是类的具体实例,拥有独立的状态。通过public和private关键字实现封装,可以保护数据完整性并隐藏实现细节,这是OOP的重要特性之一。static关键字用于定义属于类本身的成员,而非某个特定对象,常用于实现对象计数器或共享数据。const关键字则用于保证数据或函数的不变性,提升代码的健壮性和可读性。这些概念共

weixin_34033624的博客 483

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

【一天一个C++小知识】002.C++中const和volatile关键字

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾] ...

kevin_zhao_zl的博客 314

雷达仿真:FMCW TDMA-MIMO 3D点云获取方法

2 信号建模摘要:通过设置时分复用(TDMA)波形结合FMCW毫米波雷达仿真获取目标的距离、速度和方位角3D点云信息。在本案例中,首先通过发射天线交替发射FMCW波形并通过接收天线依次接收回波信号从而得到雷达原始数据,其次对获取的原始数据依次经行距离、速度、角度估计从而输出目标的3D点云。阅读本文档,你将对TDMA-MIMO雷达的基本原理、毫米波雷达距离估计、速度估计以及角度估计的基本原理有所了解,另外CA-CFAR恒虚警以及MUSIC-DOA估计在本案例中也有所涉及。1 TDMA-MIMO原理。

Poulen的博客 6959

基于CNN的表情识别(FER)pytorch实现

Report for FER Jian Tang Abstract 我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。 数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。 模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了XXXX%的平均分类准确率(avg a

qq_20241587的博客 3683

volatile关键字的作用_【一天一个C++小知识】002.C++中const和volatile关键字

1. const关键字 【1】const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”。const int a = 6; a = 10; 【2】如果按如下方式通过指针强行修改,编译可以通过,但是std::cout的话,a的值还是6,但是*p是12,这是因为,编译器对于const类型的变量不会二次读取,只会在最开始的时候从内存中读取...

weixin_39836898的博客 116

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

C++基础 002 const和#define

const和#define /*  *运行平台:Visual Studio 2015  *参考资料:《C++ Primer Plus(第6版)》,传智扫地增C++基础课程 */ 目录const和#define一、const1、const在C/C++的基本用法2、const在C中是一个冒牌货,在C++中是一个正品3、为什么会这样呢二、const与#define1、二者的相似之处2...

weixin_42813232的博客 417

Python爬虫实战:爬取小红书数据做爆款分析,我破解了签名加密+移动端反爬(附完整代码)

爬取小红书数据的核心,不是“简单的HTTP请求”,而是“理解移动端接口的加密逻辑和反爬规则”——从x-s/x-t签名破解到移动端UA伪装,再到行为模拟,每一步都是对移动端爬虫的深度理解。这套方案的价值在于,不仅能稳定抓取小红书数据,还能从数据中拆解出有价值的爆款特征,真正把“数据”变成“洞察”。对程序员来说,小红书爬虫不仅是技术练手,更是了解新媒体平台数据逻辑的窗口。希望这篇分享能帮到做新媒体分析或爬虫进阶的小伙伴,也欢迎在评论区交流小红书反爬和爆款分析的更多技巧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2058

总结个人关于雷达样式的见解(脉内脉间调制)

概述 雷达有各种各样的脉内脉间调制样式,对于雷达的设计者来说,不外乎三个目的: 1、增加雷达性能,如提高测距精度,增大侦察距离等; 2、雷达的工作机制决定雷达必须采用此种样式的调制,如有些SAR雷达为保证径向测距精度,需要使用脉内宽带调制信号; 3、降低雷达被电子战装备截获的概率,也就是LPI设计。 对于雷达对抗方,则只会观察到信号存在脉内及脉间的调制。对于一般的雷达信号,通常只采用脉内调制,脉间频率调制,脉间PRI调制。 脉间调制类型 1、PD雷达的脉间特征 雷达进行脉间调制的主要是PRI..

年糕的博客 3万+

C/C++ Const关键字小结

Const关键修饰变量常用功能 const关键字通常用来修饰变量、函数。当用来修饰变量则向编译器表示此变量为不可以修改内存数据,内存数据相当于只读属性。 const关键字修饰的变量或对象不影响该变量的生命周期。但影响变量的作用域 。使用const关键修饰的全局变量在不同文件中使用,需要显式的声明为extern属性,且必须定义时已经初始化。普通的全局变量默认即为extern属性所以不需要显式的说明即可以在不同文件中使用,且普通变量声明可初始化,也可不初始化变量。 const修饰的变量由于是只读属性

清风不知妻美的博客 257

【Simulink教程案例19】基于simulink的扩频通信系统建模与仿真

扩频是一种应用于数字调制信号的调制技术,可以提高传输信号的带宽。扩频通信具有抗干扰能力强,扩频增益越大,抗干扰能力越强。而且扩频通信具有很强的保密性,扩频后信号近似白噪声,功率谱密度也很低。扩频通信可用于多址通信。扩频调制有如下三个特点:① 扩频后信号的带宽远大于信号所需的带宽② 使用扩频码进行扩频调制,扩频码与信号中的数据相互独立③ 在接收端,通过将接收信号与扩频码的同步副本进行相关,实现解扩。

FPGA/MATLAB学习教程/源码/项目合作开发 2197

【C++】const 关键字 与 #define 宏定义 对比 ( 相同点 - 都可定义常量和优化性能 | 不同点 - const 常量进行作用域检查和类型检查 )

一、const 关键字 与 #define 宏定义 相同点 1、相同点描述 2、代码示例 - 变量作为数组大小报错 3、代码示例 - 常量作为数组大小不报错 4、代码示例 - 宏定义作为数组大小不报错 二、const 关键字 与 #define 宏定义 不同点

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1888

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

403-002_C++基础之基本数据类型及关键字

C++基础数据类型与常用关键字概述。主要介绍了6种基本数据类型,详细说明了变量与常量的定义方式。列举了92个C++常用关键字及用法。

victory_zhang525的博客 518

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于C++ const使用问题的一个小解释

问题是这样的: #include <stdio.h> int main() { const int x = 1; //字面量初始化,此时x为常量,进入符号表 const int& rx = x; //rx代表只读变量 int& nrx = const_cast<int&>(rx); //去掉rx的只读属性 ...

weixin_43946347的博客 196

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言返回值是const类型,C++中const用法总结

1.1.1. 定义普通常量使用#define来定义常量也是常用方法,但const也可以用来定义常量,在[Effective C++]中建议使用const代替#define来定义常量,因为const定义的常量具有类型信息,而宏没有,所以使用const定义的常量在进行赋值操作时编译器会进行更严格的类型检查,是类型安全的。const double PI = 3.1414926;const int POO...

weixin_39987985的博客 2058

【C++】C 语言 和 C++ 语言中 const 关键字分析 ② ( const 常量分配内存时机 | const 常量在编译阶段分配内存 )

一、const 常量内存分配时机 二、使用如下代码验证 const 常量内存分配时机 三、分析验证结果 - const 常量在编译阶段分配内存

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1349

C++_002常对象

常对象 常对象 常量是一个在程序执行过程中值不能改变的量。C++中的关键字CONST可以加到对象的声明中使该对象成为一个常量而不被改变。使用CONST说明的成员函数,称为常成员函数。只有常成员函数才有权使用常量或常对象,没有使用的CONST说明的成员不能使用常对象。#include "iostream.h"class point{private: int x,y;public: point(i...

weixin_33711647的博客 71

C++ const详解

C++ const const 变量使用问题 C++内的各种限制关键字都是在编译期间由编译器去做处理的而不是运行期间。如下代码: int x; cin >> x; const int size = x; int array[size]; // error!!! 这段代码里面看似没啥问题,其实问题很显然。size是一个const,但它的值却是x来的,是个不确定的值。用size去

vell001的专栏 547

C++ Primer学习笔记 (一)

C++ Primer学习笔记 2019-4-17 12:31:29 编写记录如下; 原文连接 第1章 开始 std::cin 中的循环流使用 参考链接:while(cin >> num)循环输入问题C++ cin输入流 详细用法; C++ 中可以使用while(std::cin >> value){//Code }的方式来进行循环数据的读入,直到没有输出为止;示例代码如...

qq_34771252的博客 617

C++学习笔记(三)

本文整理了C++编程基础的核心知识点,主要内容包括:1. C++内存管理:详细解析代码区、静态数据区、栈区、堆区的功能特点,介绍内存地址概念及变量存储原理;2. 指针基础:讲解指针的定义与使用、解引用操作、指针类型的内存占用等核心概念;3. const关键字:分析常量变量、常量指针、指针常量等不同用法,区分顶层与底层const;4. 枚举类型:对比传统枚举与C++11强类型枚举(enum class),说明枚举的定义、赋值和使用方法;5. 编程基础:涵盖变量作用域、数据类型、二进制相关概念等基础知识。文章通

ShangguanLuli的博客 1184

C语言学习第002课——关键字、占位符、常量和变量、转义字符

C语言的关键字 占位符 定义常量的两种方法 变量命名规范 常用的转义字符

12345~ 423

c++中的强制转换

在c++中新添了四个关键字static_cast,const_cast,reinterpret_cast和dynamic_cast.这四个关键字都是用于强制类型转换的。现在逐一介绍着四个关键字。 static_cast 在c++语言中static_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型,例如将数据类型转换为浮点型。 例如1.c语言所采用的类型转换方式: int a ...

weixin_43700340的博客 226

C++强制类型转换

在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。我们逐一来介绍这四个关键字。 1) static_cast 在C++语言中static_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。 [例1]C语言所采用的类

逐梦小涛 358
上一篇: 【C++】001、引用与指针的区别
下一篇: 【C++】003、static关键字
Tim_10
博客等级 码龄2年 162粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值