2.4 const - C++ primer 笔记

本文详细介绍了C++中的const关键字,包括const用于修饰变量、初始化、const引用、const指针、const参数传递和函数返回值以及const成员函数等方面。讲解了const如何确保变量不可变,以及extern关键字在文件间共享const变量的作用。同时提到了constexpr和常量表达式,讨论了它们在编译期优化中的角色。
摘要由CSDN通过智能技术生成

const 限定符

用途

修饰变量,它的值不能被改变。

初始化

const对象一旦创建,其值不能改变,所以必须初始化。
对象的类型决定了它能做的操作。
相同类型的const和非const对象,大部分操作一样,但是const类型的对象不能执行改变自己内容的操作。

extern 关键字

以编译时初始化的方式定义(这个词看着生疏,反正就是下面的方式啦QAQ)

const int buffSize = 512; //缓冲区大小

编译器编译过程中,会找到代码中所有buffSize的地方,全部替换成512。
如果代码分布在多个文件中,则每个文件需要初始化buffSize。
因为,const对象默认仅在当前文件内有效。
多个文件出现同名const变量,其实是在不同文件中分别定义了独立的变量。
为了实现文件间共享const变量,即只在一个文件中定义const,在其他文件中声明即可使用,
在每个文件中,const变量前面加上extern关键字即可。

//1.cpp
const int buffSize = 512; //缓冲区大小
//2.cpp
extern const int buffSize;//与1.cpp中的buffSize是同一个!

extern修饰其他变量时,起着同样的效果。

const的用法

const修饰引用

把引用绑定到const对象上,叫对常量的引用,对常量的引用不能 被用作修改它绑定的对象

//const对象 const引用
const int ci = 1024;
const int &r1 = ci;	//正确
ri = 42 ;			//错误
int &r2 = ci;		//错误
//非const对象 const引用
int i= 42int &ri = i;		//正确
const int &r2 = i;	//正确
r1 = 0;				//正确
r2 = 0;				//错误,r2是常量引用

const修饰普通类型的变量

const 修饰指针变量

const参数传递和函数返回值

const修饰类成员函数

const修饰类成员函数称为 常成员函数,常成员函数内部只能调用常成员函数,普通成员函数可以调用常成员函数,优先普通成员函数;const修饰的对象称为 常对象,常对象只能调用常成员函数,普通对象可以调用任意成员函数,优先普通成员函数。
看大牛博客

constexpr和常量表达式

常量表达式指 值不会改变且编译过程中就能得到计算结果的 表达式。

const int max = 20;		// max是常量表达式
const int limit = max +1;// 是
int staff_size = 27; 	// 不是
const int sz = get_size();// 不是

c++ 11 规定,允许将变量声明为constexpr类型,即告诉编译器这个是常量表达式,但编译器任需要验证变量是否为常量表达式。作用是,编译器可以大胆的对代码做优化。
故,如果你认定是常量表达式,那就把他声明为constexpr类型。

constexpr int mf = 20;		//是常量表达式
constexpr int limit =mf +1;	//是
constexpr int sz = size();	//只有当size()是一个constexpr函数时,才是正确的

看大牛博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值