浅谈c++中的关键字----const
创始人
2024-03-03 16:21:20
0

const-----英语全称(constant)-----常数,常量的意思

在c++中的常用来修饰变量或者对象,意味着不能被更新。

1:const+变量------限定变量的值,无法修改,对变量起保护作用,增加程序的健壮性;必须进行初始化。

const int a=100;
a=1000;//错误,无法修改
const int b;//错误,没有进行初始化

2:const+指针--------表示着常量指针,指针常量,指向常量的常指针。

(1)指向常量的指针---常量指针(指针的指向(内存地址)可以更改,指针的值不可以修改)

const int *h
int const *h
(这两个等价)

例如:

int g=100;
int s=200;
const int *p=&g;
//修改指针p的地址可以吗?
p=&s;
//修改指针p的值可以吗?
*p=10000;

     (&是取址符,因为p是地址,*P是解引出指针的地址)

(2)指向指针的常量----指针常量(指针的指向(内存地址不可以更改),指针的值可以修改)

int*const h

例如:

int g=100;
int s=200;int *const p=&g;
//修改指针p的地址可以吗?
p=&s;
//修改指针p的值可以吗?
*p=10000;

总结:const放在*的后面,意味着指针是常量,指针的值储存的是数据的内存地址,所以内存地址不能改变,但地址指向的数据是可以改变的。(指针常量)

const放在*前面,意味着指针的指向的内存数据不可以改变,但指向的地址可以改变。(常量指针)

(3)指向常量的常指针--------指针的指向不可以修改,指针指向的值也不可以修改

例如:

int g=100;
int s=200;
const int *const p=&g;
//修改指针p的地址可以吗?
p=&s;
//修改指针p的值可以吗?
*p=10000;

3.const+函数--------(1)使函数的返回值不能改变;(2)使函数的参数在函数体内不可改变。

const int func();
const int* func();
void func(const int a,const int *o);

4:const+类

(1)const修饰类中的成员函数-----类中的成员函数后面加上const(区分const+函数)

①该成员函数不能改变类中的成员变量

②加了const的成员函数可以被非const对象和const对象调用     但不加const的成员函数只能被非const对象调用

③const修饰的成员函数中不能调用其他的没有被const修饰过的成员函数

class Person {
public:Person() {m_A = 0;m_B = 0;}void ShowPerson() const {this->m_B = 100;//this指针的本质是一个指针常量,指针的指向不可修改,在const修饰的成员函数中,内存空间的指向的值也不能修改,意味着这是一个指向常量的常指针,但如果用mutable修饰变量,就可以修改。}void MyFunc() const {//mA = 10000;}public:int m_A;mutable int m_B; //可修改 可变的
};

(2)const修饰类中的成员变量-----(让成员变量变为不可修改的变量)

(3)const修饰类对象

//const修饰对象  常对象
void test01() {const Person person; //常量对象  cout << person.m_A << endl;//person.mA = 100; //常对象不能修改成员变量的值,但是可以访问person.m_B = 100; //但是常对象可以修改mutable修饰成员变量//常对象访问成员函数person.MyFunc(); //常对象不能调用const的函数}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...