const常见用法

 const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量

 

下面我就介绍一下几种常见的用法

1.用于定义常量变量,这样这个变量在后面就不可以再被修改

 const int Val = 10;

 //Val = 20; //错误,不可被修改

 

2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改,

则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护

 void  fun1(const int &val)

  {

     //val = 10; //出错

}

void fun2(int &val)

{

   val = 10; //没有出错

}

void main()

{

   int a = 2;

   int b = 2;

   fun1(a); //因为出错,这个函数结束时a的值还是2

   fun2(b);//因为没有出错,函数结束时b的值为10

}

如果只想把值传给函数,而且这个不能被修改,则可以使用const保护变量,有人会问为什么不按值传递,按值传递还需要把这个值复制一遍,

而引用不需要,使用引用是为了提高效率//如果按值传递的话,没必要加const,那样根本没意义

 

3. 节约内存空间,

 #define  PI  3.14 //使用#define宏

 const double Pi = 3.14 //使用const,这时候Pi并没有放入内存中

 

 double  a = Pi;  //这时候才为Pi分配内存,不过后面再有这样的定义也不会再分配内存

 double  b = PI;  //编译时分配内存

 double  c = Pi;  //不会再分配内存,

 double  d = PI;  //编译时再分配内存

const定义的变量,系统只为它分配一次内存,而使用#define定义的常量宏,能分配好多次,这样const就很节约空间

 

4.类中使用const修饰函数防止修改非static类成员变量

 class

{

 public:

  void fun() const //加const修饰

   {

     a = 10; //出错,不可修改非static变量

     b = 10; //对,可以修改

}

 private:

  int  a ;

  static int b;

}

 

5.修饰指针
const int *A; 或 int const *A;  //const修饰指向的对象,A可变,A指向的对象不可变
int *const A;               //const修饰指针A, A不可变,A指向的对象可变 
const int *const A;           //指针A和A指向的对象都不可变

 

 

6.修饰函数返回值,防止返回值被改变

  const int fun();

  接收返回值的变量也必须加const

  const int a = fun(); //接收的变量也要是const的,int a = fun()是错误的

 

7.修饰类的成员变量

  使用const修饰的变量必须初始化,在类中又不能在定义时初始化,

如;

class

{

private:

  int a = 10;

  const int b = 10;

  static const int c = 10;

//这样初始化都是错的,

}

 

初始化const int类型(没有static),在类的构造函数上初始化

Class Test

{

Public:

  Test():b(23) //构造函数上初始化b的值为23

   {

}

private:

     const int b ;

}

 

初始化staticconst int这个类型的(带有static的),在类的外面初始化

class Test

{

private:

  static const int c;

} 

const int Test::c=10; //类的外部初始化c为10

 

8.const定义的对象变量只能作用于这个程序该C/C++文件,不能被该程序的其他C/C++文件调用,

 如file1.cpp中 const int val;

 在file2.cpp中, extern intval; //错误,无法调用,

要想const定义的对象变量能被其他文件调用,定义时必须使用extern修饰为

extern const int val;

 

非const变量默认为extern,要是const能被其他文件访问必须显示指定为extern

 

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

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

相关文章

微服务治理热门技术揭秘:无损上线

为什么有了无损下线,还需要无损上线?无损上线可以解决哪些问题? 本篇文章将一一回答这些问题。 无损上线功能不得不说是一个客户打磨出来的功能我们将从一次发布问题的排查与解决的过程说起。 背景 阿里云内部某应用中心服务在发布过程中出…

深度强化学习技术概述

深度强化学习介绍 强化学习主要用来学习一种最大化智能体与环境交互获得的长期奖惩值的策略,其常用来处理状态空间和动作空间小的任务,在如今大数据和深度学习快速发展的时代下,针对传统强化学习无法解决高维数据输入的问题,2013…

大屏小程序探索实践 | Cube 技术解读

所谓大屏小程序,是以 Cube 小程序技术栈 为载体,运行在智能电视或智能机顶盒等设备上的一种小程序形态。这些设备的主要特点是: 以 Android 系统为主,系统版本普遍较低,有些设备依然停留在 Android 4.2,An…

阿里云解决方案架构师张平:云原生数字化安全生产的体系建设

关于今天的分享主题——“安全生产”,内容主要分为三大部分: 第一部分是安全生产的背景,以及我们对于安全生产这个领域的理解;第二部分主要介绍阿里巴巴集团的安全生产工作到底是怎么开展的,借此给各位有作为参考和借…

从斜边之长为L的一切直角三角形中,求有最大周长的直角三角形.(多元函数的极值及其求法)

三条直线围成的直角三角形三个顶点A(16,0),B(0,8),C(0,0),设点(x,y)到AB,BC,AC的距离分别是d1,d2,d3,有: |AB|*d1|BC|*d2|AC|*d32S(ABC) 而(|AB|*d1|BC|*d2AC*d3)^24S^(ABC)/(|AB|^2|BC|^2|AC|^2)128/5 等号成立当且仅当|AB|/d1|BC|/d2|AC|/d3 就是40/|x2y-16|8/|x|16/|y| …

全链路灰度新功能:MSE上线配置标签推送

为什么需要配置标签推送 从全链路灰度谈起 在微服务场景中,应用的灰度发布迎来了新的挑战。不同于单体架构中将应用整体打包即可发布测试版本,微服务应用往往由多个服务组合而成。这些服务通常由不同的团队负责,独立进行开发。一个新功能通…

动态尺寸模型优化实践之 Shape Constraint IR Part I

在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作,鉴于篇幅较长,为了提升阅读体验,我们将分享拆分为两个部分: Part I 中我们将介绍问…

云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析

在刚刚过去的 RocketMQ Summit 2022 全球开发者峰会上,我们对外正式开源了我们的新产品 RocketMQ-Eventbridge 事件驱动引擎。 RocketMQ 给人最大的印象一直是一个消息引擎。那什么是事件驱动引擎?为什么我们这次要推出事件驱动引擎这个产品&#xff1f…

动态尺寸模型优化实践之 Shape Constraint IR Part II

在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作,鉴于篇幅较长,为了提升阅读体验,我们将分享拆分为两个部分: Part I 中我们将介绍问…

PolarDB 助力易仓打造跨境行业生态链协同的产业链 SaaS

2022年7月,易仓ECCANG WMS东南亚版正式上线!专为东南亚海外仓业务打造,帮助东南亚海外仓企业排忧解难,实现订单、仓库、人员、财务高效管理。易仓科技是头部的跨境行业SaaS服务商,其生态涵盖了300工厂、100000卖家、17…

通讯录

#include<stdio.h>#include<string.h>int main(){int n;printf("请输入通讯录中的人的总数。");scanf("%d",&n);getchar();printf("请输入通讯录中人的姓名和其对应的编号&#xff1a;\n");int i;char name[40][40];int tell[40…

iLogtail 社区版使用入门 - 采集 MySQL Binlog

iLogtail是阿里云日志服务&#xff08;SLS&#xff09;团队自研的可观测数据采集Agent&#xff0c;拥有的轻量级、高性能、自动化配置等诸多生产级别特性&#xff0c;可以署于物理机、虚拟机、Kubernetes等多种环境中来采集遥测数据。iLogtail在阿里云上服务了数万家客户主机和…

融合数据库生态:利用 EventBridge 构建 CDC 应用

引言 CDC&#xff08;Change Data Capture&#xff09;指的是监听上游数据变更&#xff0c;并将变更信息同步到下游业务以供进一步处理的一种应用场景。近年来事件驱动架构&#xff08;EDA&#xff09;热度逐步上升&#xff0c;日渐成为项目架构设计者的第一选择。EDA 天然契合…

Pandas+ SLS SQL:融合灵活性和高性能的数据透视

Pandas是什么 Pandas是一个十分强大的python数据分析工具&#xff0c;也是各种数据建模的标准工具。Pandas擅长处理数字型数据和时间序列数据。Pandas的第一大优势在于&#xff0c;封装了一些复杂的代码实现过程&#xff0c;只需要调用接口就行了&#xff0c;避免了编写大量的…

iLogtail 开源之路

2022年6月底&#xff0c;阿里云iLogtail代码完整开源&#xff0c;正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器&#xff0c;多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户&#xff0c;目前已经有千万级的安装量&#xff0…

迁移 Nacos 和 ZooKeeper,有了新工具

背景 注册中心迁移在行业中主要有两个方案&#xff0c;一个是双注册双订阅模式&#xff08;类似数据库双写&#xff09;&#xff0c;一个是 Sync 模式&#xff08;类似于数据库 DTS&#xff09;&#xff1b;MSE 同时支持了两种模式&#xff0c;对于开通 MSE 服务治理客户&…

判断子字符串是否出现在主字符串内

//strstr(string,search)#include <stdio.h>#include <string.h>// 从str1中查找str2的个数&#xff0c;并返回int findChildCnt(char* str1, char* str2){int len strlen(str2);int cnt 0;while (str1 strstr(str1, str2)) // 如果查找到,则执行循环&#xff0…

基于 Serverless+OSS 分分钟实现图片秒变素描

场景介绍 小明接到学校老师安排的任务&#xff0c;需要批量将班级里同学们拍的普通照片转换为素描图&#xff0c;供课堂游戏使用&#xff0c;于是求助到程序员老爸&#xff0c;机智的程序员老爸分分钟用几行Python代码解决&#xff1a;在阿里云Serverless函数计算服务中部署普…

C++ Stacks(堆栈)

C Stack&#xff08;堆栈&#xff09; 是一个容器类的改编&#xff0c;为程序员提供了堆栈的全部功能&#xff0c;——也就是说实现了一个先进后出&#xff08;FILO&#xff09;的数据结构。 操作比较和分配堆栈empty()堆栈为空则返回真pop()移除栈顶元素push()在栈顶增加元素…

解析 RocketMQ 业务消息 - “顺序消息”

引言 Apache RocketMQ 诞生至今&#xff0c;历经十余年大规模业务稳定性打磨&#xff0c;服务了阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案&#xff0c;RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。本篇将继续业务消息…