首页 > 编程语言 >C++ | const的使用

C++ | const的使用

时间:2023-08-08 10:59:45浏览次数:42  
标签:const 指向 int demo sum C++ 使用 指针

const

  • 基础用法

    用于声明一个不可再被修改的变量:

    const int num = 17;
    num = 33;				// Invalid,会报错
    
  • 用于指针

    首先,如果将一个指针用const声明为常量指针,那么这个指针的指向将不能被改变。但可以通过这个指针来修改被指向的对象:

    int demo = 17;
    int* const p = &demo;	// 这是一个指向非常量对象的常量指针
    p++;					// Invalid
    *p = 33;				// Valid
    

    区别于下面这种情况:一个指向const int类型变量的指针。

    这种情况下,p的指向可以被改变,但无法通过p来改变demo的值。

    const int *p = &demo;	// 这是一个指向常量对象的非常量指针
    p++; 		 			// Valid
    *p = 32;				// Invalid
    

    从上面可以看出,指向const int类型的指针也可以用来指向int类型的变量,即被指向的变量不需要用const声明。

    而当想要用指针指向一个常量对象时,指针也必须得是用const声明(此时指针指向一个常量对象,但本身不需要是一个常量指针)。其原因是:如果demoq指针指向,那么便可以通过q指针修改demo,这样将demo定义为常量对象就毫无意义了。

    const int demo = 13;
    const int *p = &demo;	// Valid
    int *q = &demo;			// Invalid,可以通过以下代码修改demo的值:
    *q = 17;				// 当然,这行代码无法通过编译器
    
  • 用于函数

    • 用于参数

      首先,如果想要传入一个const类型的实参,那么形参必须也得是const类型:

      int sum(int arr[], int num){}
      const int a[10] = {...};
      sum(a, num);					// Invalid
      

      因此,当不需要在函数中修改参数时,最好使用const定义形参。这样既可接受const类型的实参,也可接受非const类型的实参。否则,只能接受非const类型实参:

      const int a[10];
      int b[10];
      
      int sum(int arr[]);
      sum(a);						// Invalid
      sum(b);						// Valid,在这种方法下,数组b可以被修改
      
      int sum(const int arr[]);
      sum(a);						// Valid
      sum(b);						// Valid,在这种方法下,数组b不可以被修改
      
    • 用于整个函数

      在函数声明后面跟上 const 关键字,表明这个函数不会修改当前对象(用于成员函数)。

      class tmp{
          void show() const;
      };
      void tmp::show() const{}
      

标签:const,指向,int,demo,sum,C++,使用,指针
From: https://www.cnblogs.com/C111111/p/17613568.html

相关文章

  • ubuntu18.04 使用netplan配置静态IP
    1.cd/etc/netplan2.sudovim/etc/netplan/*.yamlnetwork:ethernets:enp0s3:dhcp4:falseaddresses:[192.168.10.45/24]#静态IPv4gateway4:192.168.10.255#网关nameservers:addresses:[119.29.29.29]#DNS地......
  • kettle之添加geometry插件支持并使用
    参考:https://blog.csdn.net/aganliang/article/details/104949538为了能够处理geometry类型的数据,PDI需要安装pentaho-gis-plugins该插件下载地址:https://github.com/atolcd/pentaho-gis-plugins/releases根据自己的kettle版本,下载所需的插件即可,我的是9的,所以下载的是1.4 ......
  • windows下cmake C++库打包成C方式导出
    背景windows下当前的一个项目使用的编译器是mingw,想要使用一个使用msvc编译出来的C++库。方法重新创建一个库,这个使用extern"C"方式导出函数,在函数中调用msvc编译出来的库。项目文件文件结构|--CMakeLists.txt|--floor_calibration||--include|||--floor_c......
  • ASP.NET------DropDownList的使用方法
    第一种少量自定义数据时:.aspx中的代码:<asp:DropDownListID="DropDownList1"runat="server"><asp:ListItemValue="2">男</asp:ListItem><asp:ListItemSelected="True"Value=&quo......
  • 遇到的问题------Asp.net使用GridView的编辑修改功能回发无效
    回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则......
  • c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
     1、引用Microsoft.Office.Interop.Excel.dll2、引用命名空间、使用别名usingSystem.Reflection;usingExcel=Microsoft.Office.Interop.Excel;  3.写入excel写入函数publicvoidToExcel(stringstrTitle){intnMax=9;intnMin=4......
  • 如何支持同一台电脑上使用不同版本的Node.js版本
    在我们实际项目开发过程中,经常不同项目使用的node.js版本会也有所不同,为了方便维护不同版本的项目。可以使用nvm来解决。1、下载nvm https://github.com/coreybutler/nvm-windows/releases2、执行nvm-setup.exe完成安装3、命令查找得到最新的nodejs版本:nvmlistavailable4、......
  • Siemens 西门子S7-200 PLC使用高速脉冲输入测量瞬时流量
    西门子S7-200PLC高速计数功能除用于常见的运动控制系统转速测量之外,在流量计量方面也有着广泛的用途。由于PLC内部没有相应的算法来计算频率,因此,测定脉冲输出信号的流量计的瞬时流量就需要在STEP7Micro/WINSMART中通过以下三部分编程来实现:1、定义高速计数器计数流量计输出......
  • 使用Python中从头开始构建决策树算法
    决策树(DecisionTree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中。并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python中动手实现,这可以作为了解这类算法的基础知识。在深入研究代码之前,我们先要了解支撑决策树的......
  • 如何实现直播平台开发使用 Camera 拍照
    随着信息时代的发展,直播在我们生活中也越来普遍化,我们也越来越愿意在直播平台中分享我们的日常生活,这同时促进了直播平台开发功能且不断更新,比如生活中遇到有趣的事情就拍照记录下来随之发到平台上去,怎么把照片发布到直播平台上去,这就需要使用Camera拍照功能。Android直播平台......