首页 > 编程语言 >C++中的const用法

C++中的const用法

时间:2023-12-06 17:02:12浏览次数:30  
标签:10 const int C++ 用法 修饰 20 指针

一、修饰普通变量:

const double PI = 3.14159;
const int a = 10;//这些C++中的内置类型被const修饰时,其值不可被随意更改

二、修饰一个指针(即指针对应的值不可修改):

但是指针作为一个变量,其可指向其他位置,只是无法通过指针来改变其指向的对象的值

int a = 10;
int b = 20;
const int* p = &a;
*p = 20;//这条语句是存在语法错误的,因为其改变了指针对应的对象的值
//但是存在一种方法能够修改该对象的值const_cast
//但由于它可能引发未定义行为,所以并不推荐使用
const int* const_b = &b;
int* change_b=const_cast<int*>(const_b);
*change_b = 10;
std::cout<<*change_b;//打印结果是修改后的值,即b = 10;
//注意调用const_cast时需保证其类型为指针、引用或指向对象类型成员的指针(对象类成员即类或结构体的成员变量或成员函数)

三、修饰指针变量:

不同于第二点,这里的指针变量即指针指向的地址是不可更改的,但是指针指向的对象的值是可以更改的,故可以通过指针来修改对象的值:

int a = 20;
int b = 10;
int* const p = &a;
p = &b;//该行为会导致错误
*p = 1;//正确,将a的值改为1;
std::cout<<a;//打印结果为1;

四:既修饰指针变量,又修饰指针类型:

第四点即将第二、三点结合即可,表示指针本身及其对应的对象均不可修改

int a = 10;
int b = 20;
const int* const p = &a;
p = &b;
*p = 1;//两种操作均会报错

五:修饰函数的参数:

表示该参数不可更改:

void print(const int a){
	a = 6;//错误,a为不可修改的值
  std::cout<< a <<std::endl;
}

六:修饰函数的返回值:

同上面几点,只不过是将const修饰的值变成了函数的返回值

const int fun1();//同第一点
const int* func2();//同第二点
int* const func3();//同第三点

标签:10,const,int,C++,用法,修饰,20,指针
From: https://blog.51cto.com/u_16271511/8707021

相关文章

  • Django开发中csrf 的作用和含义以及用法
    在Django中,CSRF指的是跨站请求伪造(Cross-SiteRequestForgery)。这是一种网络入侵方法,入侵者诱使已认证的用户在他们不知情的情况下发送伪造的请求,比如在用户登录某个受信任网站后,在另一个标签页中访问恶意网站,恶意网站上的脚本可以发送请求到受信任网站,而这个请求会携带用户的......
  • between and的用法
    BETWEEN指定测试范围。语法test_expression[NOT]BETWEENbegin_expressionANDend_expression参数test_expression是用来在由begin_expression和end_expression定义的范围内进行测试的表达式。test_expression必须与begin_expression和end_expression具有相同......
  • Guava Preconditions类的各种用法
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。GuavaPreconditions类提供静态方法列表,用于检查是否使用有效参数值调用方法或构造函数。如果前提条件失败,则会抛出指定的异常。前置依赖引入pom<dependency><groupId>com.google.guava</g......
  • 技术博客:Vue中各种混淆用法汇总
    ​ 技术博客:Vue中各种混淆用法汇总 摘要本文主要介绍了在Vue中使用的一些常见混淆用法,包括newVue()、exportdefault{}、createApp()、Vue.component、Vue3注册全局组件、Vue.use()等,以及如何使用混淆器对代码进行加固,保护应用安全。引言在Vue开发中,对于新手来说,常常会......
  • STL用法
    1.vector数组从尾部插入,尾部删除。相关用法代码如下:1//1.尾部插入及删除数字2vec2.push_back(1);//尾部插入元素3vec2.pop_back()//删除尾部元素45//2.使用下标访问元素,6cout<<vec2[0]<<endl;//记住下标是从0开始的......
  • System.Diagnostics.Process.Start 用法
    原文链接:https://blog.csdn.net/polloo2012/article/details/82110642System.Diagnostics.Process.Start();能做什么呢?它主要有以下几个功能:1、打开某个链接网址(弹窗)。2、定位打开某个文件目录。3、打开系统特殊文件夹,如“控制面板”等。那么它是怎么实现这几个功能的呢?在讲......
  • Qt/C++视频监控拉流显示/各种rtsp/rtmp/http视频流/摄像头采集/视频监控回放/录像存储
    一、前言本视频播放组件陆陆续续写了6年多,一直在持续更新迭代,视频监控行业客户端软件开发首要需求就是拉流显示,比如给定一个rtsp视频流地址,你需要在软件上显示实时画面,其次就是录像保存,再次就是一些周边的处理比如贴OSD,做图片分析等。拉流显示是第一步,如果有跨平台的需求,个人推荐......
  • awk常见用法(更新中)
    来源十分钟学习awk命令常用将Linux命令输出结果的第n列的所有内容过滤出来:ps|awk'{print$1}'这个列的分隔符默认是会把空格给排除掉。如果是类似于path变量这种,使用冒号作为分割,可以使用-F选项:awk-F':''{print$1}'打印多列则将以上print部分修改为:ps|......
  • C++_类实例—指针-内存
    智能指针#g++t.cpp-std=c++11C++11中引入了智能指针的概念,方便管理堆内存智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针包含在头文件<memory>中,shared_ptr、unique_ptr、weak_ptr1......
  • springboot @PostConstruct无效的解决
    springboot@PostConstruct无效的解决问题描述:在使用SpringBoot框架时,通过@PostConstruct注解修饰的方法可能会出现无法执行的情况。解决过程:1.确认依赖首先,我们需要确认在项目中是否引入了正确的依赖。在pom.xml文件中,需要引入spring-boot-starter-web包,这个包中含......