const 修饰符

const关键字

修饰类型 char/short/int/long

宏定义与const常量的区别

宏定义

特点

  1. 在预编译阶段

  2. 只是替换,没有类型检查,不会检查代码错误

  3. 宏定义是直接替换不会分配内存

  4. 宏定义可以通过#undef来使之前的宏定义失效

  5. 宏定义不能作为参数传递给函数

宏的好处

定义代码或字符串、方法、参数const不能

坏处

使用大量宏,容易造成编译实际久,每次都需要重新替换

const

特点

  1. 在编译阶段,即程序运行时的一段代码

  2. 有常量声明,在编译时会进行类型检查,会编译报错

  3. const常量定义是要分配内存的,存储在程序的数据段中

  4. const常量定义后将在定义域内永久有效

  5. const常量可以在函数的参数列表中出现

开发中的使用场景

定义全局只读参数,代替宏,降低编译速度

方法中定义只读参数,不允许更改

const 变量

const int a

不能改变值,必须初始化

const 类变量

const MyClass a

不能修改成员变量,不能调用非const函数

指向const 变量的指针

const int \* a

不能修改指向的内容,可以改变指向的对象

const 指针

int *const a

可能修改指向内容,不能改变指向的对象

指向 const 变量的const 指针

const int * const a

不能修改指向的内容,也不能改变指向的对象const引用

const 变量作为函数参数

void MyMethod(const int a)

函数体内不能修改其值,若是指向const变量的指针做参数,上层可通过一般指针调用

const 返回值

const int &MyMethod()

返回const引用,上层不能通过此引用修改对象

const 成员变量

const int * a

非静态的const成员变量必须在初始化列表里初始化,之后不能改变其值

static const int * a

静态的const成员变量需要单独定义和初始化,不能在初始化列表里初始化

const 成员函数

void MyMethod() const

函数体内的this指针为指向const对象的const指针,该成员函数称为常成员函数,常成员函数只能访问成员变量,而不能修改。只能调用其他常成员函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值