#define, const与inline
程序员文章站
2024-03-23 11:27:40
...
#define、const与inline
在c++中有一组功能相似的关键字:#define、const以及inline,本文旨在阐述三者的区别。
一、#define
#define,也称为宏定义,源于C语言。在程序进入编译器之前,便会被预处理程序处理。如下,程序员编写代码时,可以用PI代替常量3.14,代码在编译之前会被预处理程序进行处理:即用3.14替换PI。因此,编译器的符号表中只含有3.14,而没有PI,给调试程序带来不便。
#define PI 3.14
二、const
- const是c++中的一个关键字,可用来指定一种语义上的约束,即被const修饰的对象不便被修改。
- const是通过编译器来实现修饰对象不可被修改的。
- const既可修饰全局常量,静态对象,也可修饰类内部的静态成员和非静态成员。
- const与指针
- const修饰的是p指向的对象,即a,也就是说可以改变p,但是不能改变p指向的对象。
const int *p=a;//值是常量,不可变
- const修饰的是指针,即p,因此p本身不可被修改,但是可以修改p指向的对象。
int * const p=a;//地址是常量,不可变
- p及p指向的对象均是常量,都不可变
const int * const p=a;//值和地址都是常量,均不可变
三、inline
- inline用于声明内联函数。
- 对于内联函数,编译器编译时会用函数体代码替代内联函数的调用语句
- 内联函数是建议性的,即inline只能建议编译器使用内联的方式,但是是否采用内联形式则与具体的编译器有关。
- 内联函数一般用于逻辑简单的函数
总结
- #define与const用于定义常量,实际使用中建议使用const。
- inline用于函数,只是建议性的,是否使用与具体编译器有关。