C++ const和constexpr详解

本文详细探讨了C++中的const和constexpr限定符。const用于限制变量的修改,主要应用包括初始化、指针和引用、函数参数及返回值、const成员函数与mutable关键字。constexpr则用于创建编译期常量,它可以用于变量、函数,确保在编译时计算。const与constexpr的主要区别在于const不限制运行时变化,而constexpr限定在编译期。
摘要由CSDN通过智能技术生成

const 限定符

使用变量的好处是当我们觉得变量值不合适时可以随时调整,但是这也会带来弊端,比如容易无意间改变了它的值,为了避免这种情况,可以用关键字const对变量的类型加以限定。

初始化

const限定符定义的对象必须初始化。
指针和引用这篇博客中,我曾介绍了对于const 指针和const 引用的初始化方式。
其实const类型的对象能执行大部分非const类型对象的操作,只有对const类型的对象执行改变其内容的操作时,该限定符才起作用,不仅如此,如果利用一个对象去初始化另外一个对象,则它们是不是const都无所谓

int i = 10;
const int ci = i; //正确:i的值被拷贝给了ci
int j = ci; //正确:ci的值被拷贝给了j

拷贝一个对象的值并不会改变被拷贝对象的值,一旦拷贝完成,新的对象和被拷贝对象就是两个独立的对象

const修饰指针

顶层const:指针本身是个常量
低层const:指针所指向的对象是个常量或者引用绑定的对象是一个常量

  • 对于对象类型为基本数据类型情况,其const都是顶层const
class A {
   
public:
	int val;
};

int main()
{
   
	const int i = 10; 		//不能改变i的值,这是一个顶层const
	const double d = 1.2;	//不能改变d的值,这是一个顶层const
	const char c = 'a';		//不能改变c的值,这是一个顶层const
	const A object_A;		//不能改变object_A的值,这是一个顶层const
	return 0;
}
  • 对于对象类型是指针的情况,其对象即可以是顶层const,也可以是底层const
int i = 10;
int j = 20;
const int *p1 = &i;		//允许改变指针p1的值,即可以改变其指向,但不允许改变i的值,这是一个底层const
p1 = &j;				//使p1从指向i改为指向j
cout << *p1 << endl;	//输出j的值,20
int* const p2 = &i;		//允许改变i的值,但是不允许改变指针
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倒地不起的土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值