C++11学习之const限定符

【C++11新特性constexpr】&【C++const&类】&【C++常量表达式函数】 所以我们constexpr的作用就是修饰常亮表达式,后期c++编程中,我们可以:const表达只读的变量,constexpr表达常量表达式。4.const修饰的变量只能由指向const变量的指针操作。常量表达式:由>=1个常量组成,并且在编译阶段就得到结果的表达式,很大程度提高效率(非常量是在运行阶段)c++程序4阶段:预处理,编译,汇编,链接->得到可执行程序,然后运行。注意:struct和class不能用constexpr修饰。变量:const int a==int const a。 阅读详情

const 限定符

在c++11中,主要有两大应用:变量的限定和成员函数的限定

const 限定符用来表示不可变的对象。const 对象必须初始化。

变量的限定

1.        可以用来限定变量,内置或者类类型

例如    

                 const int i = 42;

对类类型的限定如:   

                 const Sales_data rhs ;

表示这些变量的值不可改变,即这些变量的值只能读,不能赋予新值。

2.        可以用来限定指针

                 const int * const ip = &i;

//指针ip是指向不可变的int型的常量指针。*p =23 意味着修改i,这是不允许的;p = q意味着改变指针指向的对象同样是不允许的操作。

指针是对象。在指针中有顶层const和底层const的概念。所谓顶层const指的是指针本身是const的,即常量指针;底层const是指针所指的对象是const的,即对象是常量

3.        可以用来限定引用

注意:引用不是对象,只是所引用对象的一个别名。因此它的const没有底层顶层之分!

如果所引用的对象是const的,则引用必须是const的:

                  const int &r = i; 

引用不是对象,因此不存在

                  int & const ref = i;

成员函数的限定

成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。例如一个Sales_data类型的一个对象total,调用其成员函数如total.isbn(),则编译器负责把total的地址传递给isbn的隐式形参this,可以等价的认为编译器将该调用重写成了如下形式:               

              Sales_data::isbn(&total);

this是一个常量指针,不允许改变this中保存的地址。

而成员函数的const限定如以下形式:

class Sales_data{

public:

std::string isbn() const { return bookNo;}  /*const位于函数形参列表之后*/

//其他成员

};

这里的const的作用是修改隐式this指针的类型。默认情况下,this的类型是指向类类型非常量版本的常量指针,加入const之后表示this是指向类类型常量版本的常量指针。即该函数不会改变Sales_data的数据成员。另外,通过区分成员函数是否是const的,可以对其进行重载。虽然常量对象可以调用非常量版本和常量版本的成员函数,但有时调用非常量版本是一个更好的匹配。

奶奶都能看懂的 C++ —— const 限定符与指针 详细讲解 C++ 中 const 限定符与指针的结合使用,包括常量引用、常量指针的定义规则,以及顶层 const 和底层 const 的区别与应用场景。 阅读详情

相关推荐

C/C++复杂声明解析:螺旋移动法与const限定符深度指南

在C/C++编程中,理解变量和函数的声明是掌握类型系统的基础。声明语法定义了标识符的类型、存储类及作用域,其核心在于解析操作符(如*、[]、())的绑定顺序与结合性。螺旋移动法(又称顺时针/左右法则)提供了一套系统化的视觉解析路径,通过从标识符出发,按‘向右→向内→向左’的优先级顺序拆解嵌套的指针、数组和函数声明,将编译器理解声明的方式可视化。这一方法的技术价值在于,它能将晦涩的语法规则转化为可操作的步骤,显著降低学习指针、函数指针及多级间接寻址的认知门槛,是深入理解内存模型和类型安全的有效训练工具。在工程

benben 417

【C++11 笔记】关键字剖析 —— const / constexpr

C++ 关键字:const / constexpr

闻韶 2211

STM32F103 实例应用(10)——I2C读写24C32

一、应用简介 本文介绍24C32的读写,基于野火的软件I2C程序。 board_i2c.h /**=========================================================================== @file board_i2c.h @brief 本文件是用于I2C驱动 @author 青梅煮久 @version r0.1 @date 2021/01/13 -------------------------.

qq_34118600的博客 3447

C++11之常量表达式(const与constexpr的区别)

C++11标准要求,编译时的浮点数常量表达式的精度必须大于等于运行时的浮点数常量的精度(为了解决浮点数精度丢失问题)。当我们在添加了常量表达式构造函数后就必须要添加非常量表达式构造函数的版本,因为常量表达式构造函数也可用于非常量表达式中的类型构造。所以,在使用这个常量数值创建数组时编译失败,当作枚举成员赋值也编译失败,作为swicth中的case 分支也会编译错误。规定,当声明为常量表达式的模板后,某个该模板的实例化结果不满足常量表达式的要求后,是一个常量表达式,所以编译器进行编译时就会计算出函数的值。

林夕07 1869

语言随机效应模型_线性混合效应模型 VS 方差分析

线性混合效应模型相比方差分析具有很多优点。为了让大家更直观的了解,我们来做一下两者的对比。基于模拟的方法,生成了以下数据dat_sim:这种数据格式是长格式,也就是从实验软件导出来的那种数据格式。这种数据格式可以直接使用线性混合效应模型进行分析。该实验设计是被试内项目间的单因素两水平设计。category是自变量,两个水平分别是outgroup和ingroup,outgroup比ingr...

weixin_31960565的博客 2688

Alipay 支付唤起 h5 测试

测试地址 https://recharge.apps.oppomobile.com/recharge-center/recharge/?from=message try { //唤起客户端快捷参数 var data = {"requestType":"SafePay","fromAppUrlScheme":"alipays","dataString":"h5_ro...

六桥风月IT随笔 1万+

C++11关键字constexpr看这篇就够了

一、在普通函数中的使用 例如下面的代码, 数组的大小必须是常量,在声明数组array时,用函数返回值,此时会报错: error C2131: 表达式的计算结果不是常数 note: 对未定义的函数或为未声明为“constexpr”的函数的调用导致了故障 用constexpr关键字可以解决这种问题,在GetLen函数前加constexpr声明,代码如下: 当然,constexpr修饰的函数也有一定的限制:  (1)函数体尽量只包含一个return语句,多个可能会编译出错; ...

琅嬛福地 5万+

LAMMPS实战指南 - 从in文件到分子动力学模拟的完整流程解析

本文详细解析了LAMMPS分子动力学模拟的完整流程,从理解in文件的核心作用与基础结构开始,逐步指导如何创建模拟体系、选择势函数、进行能量最小化与初始化,并深入讲解了NVT/NPT系综弛豫与生产模拟的关键步骤。文章还提供了常见问题的避坑指南与实战技巧,帮助初学者快速掌握从编写in文件到成功运行模拟的全过程。

weixin_28365523的博客 396

C++ const和&在函数参数中的含义

知识点小结 C++中有的函数参数会用const来传递,同时配合&取地址符一起使用,形式如 void form(const int &a)。一开始并不懂其中深意,后来查了一下,发现这种用法和值传递的效果是一样的。但是因为引用的效率较高,所以在参数是复杂的数据类型的时候,采用这种常量引用的方法。这样既使用了引用,又使用const限制了对参数的修改。具体代码如下图所示: #inc...

见牛羊的博客 1万+

MAC M1用户必看:UTM虚拟机安装Win11全流程避坑指南(附驱动下载)

本文为MAC M1用户提供UTM虚拟机安装Win11的完整指南,涵盖镜像准备、驱动优化及性能调优等关键步骤。特别针对TPM 2.0验证、网络连接等常见问题提供解决方案,帮助用户高效运行Windows 11 ARM版。

weixin_29204205的博客 341

提升RAG效果:为何 JSON 格式远胜 Markdown?

在构建强大的 RAG (检索增强生成) 系统时,文档解析是至关重要的第一步。它直接影响着后续的检索效率和生成质量。在众多文档格式中,JSON (JavaScript Object Notation) 格式正逐渐展现出其相对于传统 Markdown 格式的巨大优势。本文将深入探讨 JSON 在 RAG 系统文档解析中的卓越之处,并结合具体案例,让你理解为何 JSON 才是构建下一代智能应用的更优选择。RAG 系统的核心目标是让模型能够利用外部知识库,生成更精准、更贴合实际的答案。

simoncool23的博客 2718

从零到一学习c++(基础篇--筑基期三-const限定符)

替代宏(

永远怀着至诚之心拥抱世界 1264

SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇) 第一篇:需求梳理与架构设计:从零搭建SAP主数据校验能力底座

摘要: 本系列博客介绍SAP主数据校验工具的开发和设计,旨在解决物料、供应商、客户等主数据录入不规范、关联缺失和合规性问题。第一篇聚焦需求梳理与架构设计,提出分层技术架构(展示层、业务逻辑层、数据访问层),支持实时校验和批量校验两种模式,并详细说明规则引擎设计、SAP系统对接方案及权限管控逻辑。后续篇章将深入规则引擎实现、接口对接、结果可视化和性能优化,帮助构建集中式、可配置的主数据校验能力,提升SAP数据质量。

baidu_35680696的博客 332

2024年C C++最全【C++ Primer 5th】 第二章,2024年最新C C++开发面试宝典

C++是一种静态类型语言,其含义是在编译阶段检查类型。这就要求我们在使用 某个变量之前必须先声明。如果想声明一个变量而非定义它,就在变量名前添加extern关键字,而且不要显示的初始化。//这是定义,不能放在函数体内部,只能放函数外//声明i而非定义iint j;//声明并定义j变量能且只能定义一次,但可以被声明多次。如果要在多个文件使用同一个变量,就必须将声明和定义分离,定义的变量必须且只能出现在一个文件中。

2401_84978603的博客 780

c#仿热血江湖

Int32_1 = (int) table.Rows[i]["FLD_初级附魂"],Int32_2 = (int) table.Rows[i]["FLD_中级附魂"],Int32_3 = (int) table.Rows[i]["FLD_是否绑定"],Int32_0 = (int) table.Rows[i]["FLD_进化"],Form1.smethod_1(2, "加载百宝阁物品----没有百宝阁数据");Form1.smethod_1(2, "加载物品商店----没有物品数据");

weixin_42132177的博客 143

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++ Primer Plus学习笔记之处理数据

个人觉得学习编程最有效的方法是阅读专业的书籍,通过阅读专业书籍可以构建更加系统化的知识体系。一直以来都很想深入学习一下C++,将其作为自己的主力开发语言。现在为了完成自己这一直以来的心愿,准备认真学习《C++ Primer Plus》。为了提高学习效率,在学习的过程中将通过发布学习笔记的方式,持续记录自己学习C++的过程。本章首先将介绍C++的基本类型:整数和浮点数。同时会介绍一种标识存储的数据的方法——使用变量;接着介绍如何在C++中进行算术运算;最后,介绍C++如何将值从一种类型转换为另一种类型。为把信

weixin_36114953的博客 639

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++学习笔记-----基础部分(包含部分C语言知识点)

我们知道C语言是结构化和模板化的语言,面向过程而C++是一种支持面向对象(OOP)和泛型编程的C语言超集它保留了C语言的所有优点并增添了独有的机制面向对象(封装 继承 多态)泛型编程、多个标准模板库以及异常处理等目前它的标准已经更新到了C++23接下来主要学习C++98和C++11标准

2401_83516724的博客 883

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++ 学习笔记(六)(const 限定符篇)

前言:主要是自己学习过程的积累笔记,所以跳跃性比较强,建议先自学后拿来作为复习用。

张小艾博客 1792

C++ 方法后的const及引用限定符作用

C++ 成员函数后的const及引用限定符作用const 限定符const跟在成员方法后引用限定符 const 限定符 我们最早学习const应该是在字符串函数中使用的const char* szSource, 此时我们虽然可以通过szSource++,一个字符一个字符读取,但是无法修改字符内容,比如*szSource='a'。 const跟在成员方法后 class Foo { public: Foo() { data = 10; } void show() const { //data

Doub1's Blog 786

C++11 —— 人中龙凤尚且举步维艰,我等鱼目又怎能一生顺遂

Hello,大家好,当我们走到这里时,就说明我们关于C++的大部分知识就已经学的差不多了,接下来,我们来学习一下C++11这个补充知识,这部分知识相对来说其实也是比较重要的,因此,我在这里建议大家这部分内容需要我着重掌握。

2301_81390458的博客 2462

【C++】指针、引用以及const限定符的学习总结

一、引用 1.1、左值引用(引用)  1.1.1、定义  1.1.2、引用的一些注意点 1.2、右值引用 二、指针 2.1、语法 2.2、空指针 2.3、void* 指针 2.4、指向指针的指针 2.5、指向指针的引用 三、const限定符 3.1、定义 3.2、const的引用 3.2.1、涉及类型转换 3.2.2、不涉及类型转换 3.3、const和指针 3.3.1、指向常量的指针(指针常量) 3.3.2、常量指针 3.3.3、指向常量对象的指针常量 3.4、顶层const 3.5、常量表达式和cons

lrzHHl的博客 369

C++基础的不能再基础的学习笔记——const限定符

const限定符 const限定符修饰的变量,只有只读功能,而无法改变值。 一、const的特点 1.const对象一旦创建不可更改,因此必须初始化。 const int bufSize = 512; bufSize = 512; //错误,试图改变值 const int i = 12; const int j; //错误,没有赋初值 2.默认状态下,const对象只在

喵喵喵 267

C++11新特性(4)- const, const expression和constexpr

const限定符const可以用于定义变量,它的值不能被改变。const int bufSize = 512;如果有代码试图修改这个变量,就会发生编译错误。指针和constconst当然也可以用于修饰指针,但是会带来一些混乱,例如:const double pi = 3.14;const double  *cptr = π    //指向常数的指针*cptr = 4;        ...

面向对象思考 2732
上一篇: 关于原码、反码、补码
下一篇: 动态创建二维数组
AdmireLinux
博客等级 码龄11年 6粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值