C++关键字const使用方法详解

 更新时间:2022年12月01日 10:35:41   作者:漂泊的小森  
C语言中的const与C++有很大的不同,在C语言中用const修饰的变量仍是一个变量,表示这个变量是只读的,不可显示地更改,C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符

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的函数
}

到此这篇关于C++关键字const使用方法详解的文章就介绍到这了,更多相关C++关键字const内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt创建并显示柱状图的方法

    Qt创建并显示柱状图的方法

    Qt Charts 模块提供了一套易于使用的图表组件,本文主要介绍了Qt创建并显示柱状图,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C++ 大根堆排序学习笔记

    C++ 大根堆排序学习笔记

    这篇文章主要为大家介绍了C++ 大根堆排序的学习教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • C++精要分析decltype的作用及用法

    C++精要分析decltype的作用及用法

    decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用
    2022-05-05
  • C语言数据结构之模式匹配字符串定位问题

    C语言数据结构之模式匹配字符串定位问题

    这篇文章主要介绍了C语言数据结构之模式匹配字符串定位问题的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • C语言指针详解

    C语言指针详解

    这篇文章非常详细的讲解了C语言中指针的概念,包含多种方法,多种定义,全面的说明了C语言的特性
    2021-06-06
  • C语言实现洗牌与发牌游戏

    C语言实现洗牌与发牌游戏

    这篇文章主要为大家详细介绍了C语言洗牌与发牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • visual studio 2015下boost库配置教程

    visual studio 2015下boost库配置教程

    这篇文章主要为大家详细介绍了visual studio 2015下boost库的配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • C语言删除输入字符串中的空格示例代码

    C语言删除输入字符串中的空格示例代码

    最近工作中遇到了需求,要删除字符串中的所有空格,就要筛选出空格字符,这篇文章主要给大家介绍了关于利用C语言删除输入字符串中的空格的相关资料,需要的朋友可以参考下
    2022-12-12
  • QT生成随机验证码的方法

    QT生成随机验证码的方法

    这篇文章主要为大家详细介绍了QT生成随机验证码的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 深入解析C++编程中__alignof 与__uuidof运算符的使用

    深入解析C++编程中__alignof 与__uuidof运算符的使用

    这篇文章主要介绍了C++编程中__alignof 与__uuidof运算符的使用,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01

最新评论