C++之const

        const是C++中的关键字,又叫常量限定符,作用是告知编译器const修饰的变量是不可修改的。

1、const修饰常量

1.1、修饰常量

#include <iostream>
using namespace std;int main(int argc, char argv[])
{// 在修饰常量时,int const和const int是等价的。int const a = 10;const int b = 20;cout << "a: " << a << "; b: " << b << endl;//a = 30;  // 不允许修改,执行错误//b = 40;  //不允许修改,执行错误return 0;
}

结果:

a: 10; b: 20

1.2、修饰数组

#include <iostream>
using namespace std;int main(int argc, char argv[])
{// 在修饰数组时,int const和const int是等价的。int const a[5] = {10, 20, 30, 40, 50};const int b[5] = {60, 70, 80, 90, 100};cout << "a: " << a[2] << "; b: " << b[3] << endl;//a[3] = 30;  // 不允许修改,执行错误//b[4] = 40;  //不允许修改,执行错误return 0;
}

结果:

a: 30; b: 90

1.3、修饰指针

#include <iostream>
#include <string>
using namespace std;int main(int argc, char argv[])
{// 变量num的值可以任意修改int num = 1876;// ptr_1将一直也只能指向变量num,不能指向别的int型变量int* const ptr_1 = &num;// 不能通过ptr_2修改num的值,ptr_2可以指向别的int型变量const int* ptr_2 = &num;// ptr_3将一直也只能指向变量num,不能通过ptr_3修改num的值const int* const ptr_3 = &num;return 0;
}

总结:

        若const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。

        若const位于*的右侧,则const就是修饰指针本身,即指针本身是常量。

2、const修饰函数

        const在函数中根据修饰的位置分为三种:函数参数、函数返回值、成员函数。

2.1、const修饰函数参数

        参数可以是变量、指针、引用等。

#include <iostream>
#include <string>
using namespace std;int sum(const int a, const int b)
{// a = 100;    // 执行错误,const修饰不能修改return a + b;
}int main(int argc, char argv[])
{int a = 10;int b = 20;cout << "sum: " << sum(a, b) << endl;return 0;
}

结果:

sum: 30

2.2、const修饰函数返回值

        返回值可以是指针、引用、或者值传递(值传递没有必要用const修饰)等。

#include <iostream>
#include <string>
using namespace std;class student
{
public:private:int age = 10;
};student std_1;// 值传递,没有必要用const修饰
const int sum(int a, int b)
{return a + b;
}// 返回值为指针
const student* get()
{return &std_1;
}int main(int argc, char argv[])
{int a = 10;int b = 20;cout << "sum: " << sum(a, b) << endl;const student* std_2 = get();student std_3;//std_2 = std_3;  // std_2是一个常量不能改变return 0;
}

结果:

sum: 30

2.3、const修饰类的成员函数

        const修饰的成员函数为了保护成员变量,要求const函数不能修改成员变量,否则编译会报错。

        函数体内不能修改成员变量的值,增加程序的健壮性或鲁棒性。只有成员函数才可以在后面加const,普通函数后加const无意义。

#include <iostream>
#include <string>
using namespace std;class student
{
public:void set(int age_t) const;
private:int age = 10;
};void student::set(int age_t) const
{// 因为age是成员变量,set函数不能修改成员变量的值,所以此处执行失败//age = age_t;cout << "aa bb cc dd ee ff." << endl;
}int main(int argc, char argv[])
{student std_1;std_1.set(100);return 0;
}

结果:

aa bb cc dd ee ff.

const函数的规则:

        [1]、const对象只能访问const成员函数,非const的对象可以访问任何成员函数,包括const 成员函数。

        [2]、如果函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载,那么const对象调用const成员函数,非const对象默认调用非const的成员函数。

        [3]、const成员函数可以访问所有成员变量,但是只能访问const的成员函数。

        [4]、非const成员函数,可以访问任何成员变量,也可以访问任何成员函数。

        [5]、const成员函数不能修改任何的成员变量,除非变量用mutable修饰。

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

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

相关文章

C++奇迹之旅:类和对象const成员static关键字友元内部类

文章目录 &#x1f4dd;const成员&#x1f320; const 成员函数是什么&#xff1f;&#x1f320; 取地址及const取地址操作符重载 &#x1f309;static成员&#x1f320;概念&#x1f320;static特性&#x1f309;static小题 &#x1f320;友元&#x1f309; 友元函数&#x1f…

标准版/开源版 移动端新增页面使用文档

在标准版开发的实际使用中&#xff0c;随着用户移动端的产品和信息内容不断增多&#xff0c;新增页面来展示对应的产品详情、模块等内容。针对一些概念或者步骤较多的内容&#xff0c;可以新增子页面构建多级模块结构&#xff0c;帮助用户快速定位。 下面就如何新增页面做一讲…

掩码讲解,以及生成

掩码生成模块的原理主要基于特定的算法和规则&#xff0c;用于生成一个掩码矩阵&#xff0c;该矩阵与输入序列的长度相同&#xff0c;由0和1组成。这个掩码矩阵的作用是控制模型在处理序列数据时忽略无效部分。 在自注意力机制中&#xff0c;掩码被用来屏蔽无效的位置&#xff…

新一代大数据平台,为什么选择中国移动梧桐数据库?

个人介绍&#xff1a;艺名司镜233&#xff0c;是中国移动梧桐数据库研发团队成员&#xff0c;从事相关的技术开发近5年了。最让我觉得自豪的不是在研发这款数据库&#xff0c;而是我们用代码&#xff0c;切实地帮助企业解决数据的困扰&#xff0c;切实地解决社会的问题。 本篇文…

软件工程的介绍

软件工程 这一章的内容其实还是蛮多的,大概一共有10个章节,分别是下面的一些内容,但是呢,这一章的内容其实是比较偏向文科类的,也就是说,记忆的内容其实占有很大的篇幅,在该考试科目当中呢,其实也是主要影响上午题部分的选择题的考察,基本的分值呢,在10分左右,分值占…

windows ubuntu:sed,awk,grep篇:4.执行 sed

目录 23.单行内执行多个 sed 命令 24.sed 脚本文件 25.sed 注释 26.把 sed 当做命令解释器使用 27.直接修改输入文件 23.单行内执行多个 sed 命令 第一章内已经讲过&#xff0c;单行内执行多个 sed 命令有多种方法。 1. 使用多命令选项 –e 多命令选项-e 使用方法如…

Mybatis-Plus自定义dataScpoe拦截器实现数据权限

使用AOP切面&#xff0c;自定义注解&#xff0c;自定义mybatisplus拦截器&#xff0c;使用 JSqlParser 自定拼接where条件。 1、自定义注解DataScope&#xff1b;注解一般用于Service层或者DAO层(Mapper) import java.lang.annotation.*;/*** 数据权限过滤注解**/ Target(Elem…

7-云原生监控体系-PromQL-函数功能和示例

Prometheus支持几个函数来操作数据。 文章目录 1. 函数语法解释2. count(v instant-vector)3. topk(n, v instant-vector)4. bottomk(n, v instant-vector)5. increase(v range-vector)6. rate(v range-vector)7. rate 和 increase8. irate(v range-vector)9. predict_linear(…

Dockerfile: ENTRYPOINT和CMD的区别

CMD&#xff1a;The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容器启动的时候要运行的命令。 ENTRYPOINT&#xff1a;也是指定这个容器启动的时候要运行的命令。 ———————…

docker菜鸟教程

Docker是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖打包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上。以下是Docker的一些基本概念和操作指南&#xff1a; 镜像(Image)&#xff1a;Docker镜像是一个文件系统&#xff0c;它包含了应用程序及…

Golang基础1-基本类型、if、switch、string

基本类型 bool 整数&#xff1a;byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64 浮点数: float32 ,float64, complex64 ,complex128 array&#xff08;值类型&#xff09;、slice、map、chan&#xff08;引用类型…

【Android】 网络技术

前言 本文用于记录Android网络技术的使用&#xff0c; 包括我们如何发起一条HTTP请求、解析XML、JOSN格式的数据以及最好用的网络库Retrofit。 使用HTTP协议访问网络 关于HTTP协议的工作原理&#xff0c;我们只需要知道客户端向服务器发起一条HTTP请求&#xff0c;服务器接收…

使用VIVE Eye and Facial Tracking SDK 1.3.6.8 开发眼动追踪功能

在虚拟现实&#xff08;VR&#xff09;环境中&#xff0c;眼动追踪技术可以显著增强用户体验和应用的交互性。HTC Vive Focus 3是一款集成了眼动追踪功能的头戴式显示设备。本文详细介绍如何使用VIVE Sense的VIVE Eye and Facial Tracking SDK 1.3.6.8 在 Unity 中实现眼动追踪…

【MySQL 数据宝典】【索引原理】- 001 索引原理分析 (AVL树、B-Tree、B+Tree)

一、索引定义 MySQL官方对索引定义&#xff1a;是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。 索引是物理数据页存储&#xff0c;在数据文件中&#xff08;InnoDB&#xff0c;ibd文件&#xff09;&#xff0c;利用数据页(page)存储。 索引可以…

Rust检查一个Vec<String>是否包含一个特定的子字符串

在Rust中&#xff0c;你可以使用contains方法来检查一个Vec<&str>是否包含特定的字符串。但是&#xff0c;如果你想检查一个Vec是否包含一个特定的子字符串&#xff0c;你需要先将子字符串转换为String。 以下是一个示例代码&#xff0c;展示了如何检查一个Vec是否包…

linux 开机自启 rc.local

rc.local 是启动加载文件 例1. compose启动Harbor 写一个开启自动启动的脚本 [rootharbor harbor]# vim startall.sh #!/bin/bash cd /root/harbor docker-compose stop && docker-compose start给脚本权限 chmod x startall.sh chmod x /etc/rc.d/rc.local #ll 查…

springcloud微服务搭建多数据源(mysql,oracle,postgres,等等)管理模块,支持通过注解方式切换不同类型的数据库

1.背景 同一套微服务管理系统&#xff0c;业务完全一样&#xff0c;但不同的客户可能要求使用自己熟悉的数据库&#xff0c;比如&#xff0c;mysql&#xff0c;oracle&#xff0c;postgres&#xff0c;还有一些国产数据库。如果能够将数据库模块独立出来&#xff0c;兼容各家的…

【数据结构】算法的效率(时间复杂度和空间复杂度)

目录 一.算法的效率 二.时间复杂度 1.概念 2.大O的渐进表示法 3.常见时间复杂度计算举例 三.空间复杂度 四.常见复杂度对比 五. 复杂度的oj练习 1.消失的数字 2.轮转数字&#xff1a; 一.算法的效率 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空…

【android 问题 之--自问自答】

同一个task 可以放不同进程的activity吗&#xff1f; 答&#xff1a;可以的。 A activity获取C activity的返回值有什么方法&#xff1f; 答&#xff1a;1.最笨的办法是使用stattactivityforresult方法启动A&#xff0c;B&#xff0c;C。在onActivityResult方法中进行 回传返…

Elasticsearch文本分析深度解析

在Elasticsearch的世界里&#xff0c;文本分析是数据索引和检索过程的核心环节&#xff0c;它决定了如何将原始文本转换为可搜索的词汇单元。这一过程不仅关乎索引的效率&#xff0c;更直接影响到搜索结果的相关性和准确性。本文将深入探讨Elasticsearch中的文本分析机制&#…