C++中const关键字的用法图文详解

 更新时间:2024年08月06日 09:42:57   作者:咩咩大主教  
在C++中const是一个关键字,用于声明常量,它可以用于多种情况,包括声明常量变量、常量指针、以及成员函数中的常量性,这篇文章主要给大家介绍了关于C++中const关键字用法的相关资料,需要的朋友可以参考下

C语言和C++中const的不同

首先我们需要区分一下C语言中的const和C++中的const,C语言中的const修饰的变量可以不初始化,但如果将一个变量定位为const类型还不初始化,那么之后就不能对这个变量直接赋值了。

如果我们使用C语言中的const定义的变量指定数组的大小,那么就会直接报错,因为数组大小的初始化必须是一个常量,实际上在C语言中,const确实不是用来定义一个常量的,而是用来定义一个常变量的,只是这个变量的值不能被直接修改(通过指针还是可以修改这块内存的值的),除此之外这个变量和其他的C语言的变量没什么区别,甚至连编译生成指令的方式都是一样的。

但是在C++中,const就是真正用来定义一个常量的,不进行初始化就会直接报错。

这主要是因为常量的编译方式和变量的编译方式不同,常量在编译阶段会将整个程序中这个常量的名称都替换为这个常量的值,那么如果你在定义一个常量的时候,还不进行初始化的话,编译器就不知道要替换为什么值,自然就会直接报错了。

用C++中的const修饰的变量可以初始化数组的大小,也说明了这个变量实际上是一个常量。

当然了既然已经用const修饰作为常量了,那么这个变量就不能作为左值来使用了,毕竟你不能修改一个常量的值嘛。

如果你按照下面这种方式在C++中定义一个const类型的变量,那么这个变量就直接退化为了C语言中的常变量了。

	int a = 10;
	const int p = a;
	return 0;

C++中的const配合一级指针使用 

 一般来说,在C++中const配合一级指针使用有四种形式。

	const int *p
	int const* p;
	int* const p;
	const int* const p;

const的修饰作用

那么很多人其实分不清这上面四种const用法所产生的效果,实际上,在C++中const修饰的是离它最近的类型。

比如const int *p,这个const显然修饰的是int类型,也就是*p,p本身是一个int*类型的,*p就是int类型嘛,代表*p不能被改变。

int const *p,这个const离int最近,所以也是修饰int类型,同样是*p,代表*p不能被改变,也就是指针所指向的值不能改变。

int *const p的const就是离int *最近了,所以修饰的是int*类型,也就是p,代表p所指向的地址不能改变。

const int * const p有两个const,离第一个const最近的是int,离第二个const最近的是int *,所以第一个const修饰的是*p,代表*p不能改变,第二个const修饰的是p,代表p不能改变,所以呢,这个指针所指向的值不能被修改,指向的地址也不能被修改。

const的类型转换

对于const的类型转换,我们需要知道一个原则,那就是const的右边如果没有指针符号的话,const不参与类型之中。

	int* q;
	int* const p;
	const int* w;

int *q的类型是int *,int *const p的类型也是int *,因为const的右边没有*号,所以const不参与类型中,而const int *w的类型就是const int*了,因为const的右边存在*号。

另外呢,从int *是可以转换到const int *的,但是const int *不能转换为int *,否则不就代表你可以修改这个指针所指向的值了吗。

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

相关文章

  • 深入浅析C++中的#,##,和

    深入浅析C++中的#,##,和

    这篇文章主要介绍了C++中的#,##,和"的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • Qt绘制时钟效果

    Qt绘制时钟效果

    这篇文章主要为大家详细介绍了Qt绘制时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    C语言中strlen() strcpy() strcat() strcmp()函数的实现方法

    这篇文章主要介绍了C语言中strlen() strcpy() strcat() strcmp()函数的实现方法,需要的朋友可以参考下
    2017-08-08
  • CreateCompatibleDC()函数案例详解

    CreateCompatibleDC()函数案例详解

    这篇文章主要介绍了CreateCompatibleDC()函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C++隐式转换问题分析及解决办法

    C++隐式转换问题分析及解决办法

    在本篇文章里小编给大家整理了关于C++隐式转换问题分析及解决办法,有需要的朋友们可以学习下。
    2020-02-02
  • C语言实现经典windows游戏扫雷的示例代码

    C语言实现经典windows游戏扫雷的示例代码

    今天我们会用C语言实现一个经典的windows小游戏:扫雷。扫雷是一款单机小游戏,每次通关最高难度的关卡都会开心好一阵。现在学会了C语言,总算可以自己实现扫雷了。话不多说,咱们开始吧
    2022-10-10
  • C语言中如何在结构体内定义函数

    C语言中如何在结构体内定义函数

    这篇文章主要介绍了C语言中如何在结构体内定义函数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++ 整数拆分方法详解

    C++ 整数拆分方法详解

    整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧
    2016-08-08
  • 基于结构体与指针的详解

    基于结构体与指针的详解

    本篇文章是对结构体与指针进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • opencv实现角点检测

    opencv实现角点检测

    这篇文章主要为大家详细介绍了opencv实现角点检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论