C++中define与const的区别

如有错误,欢迎批评指正

一、二者的区别

①编译器对二者的处理方式不同

define宏是在预处理阶段进行展开,只做展开处理不做运算处理;

const常量是在编译和运行阶段使用。

②类型和安全检查不同

define宏定义是没有类型的,在预处理阶段不做任何类型安全检查;

const常量是有类型的,在编译阶段进行类型安全检查。

③存储方式不同

define宏定义是不分配内存的;

const常量定义是需要分配内存的。

④const常量可以节省空间,避免不必要的内存分配

例如:

#define SIZE 1024 ;//常量宏

const int NUM = 3; //必须进行初始化,此时分配内存,以后不再分配内存

int a = NUM;           //只为变量a分配内存

int b = SIZE;           //为变量b和SIZE分配内存

int c = SIZE;           //为变量c和SIZE分配内存

⑤define宏可以定义函数,此时函数相当于c++中的内联函数,而const只能定义常量。

二、下面对二者的具体使用做一个详细的介绍

1、define的使用

在C++中,define的宏定义是将一个标示符定义为一个字符串,该标示符被称为宏名,字符串被称为替换文本。define宏定义有两种使用形式,一是不带参数的宏定义(简单的宏定义),另一种是带参数的宏定义。

①简单宏定义

例如:#define PI 3.1415;

在以后的程序中,使用标示符PI,就相当于使用3.1415,即完成从3.1415到PI的替换。

②带参数的宏定义

例如:#define  SUM(x)   x+x;

   int  a  =  SUM(3)* 4;//计算a是多少??

计算的过程如下:

将SUM(3)进行替换,即a = 3 + 3 * 4,因此a = 15,这就证明了define宏定义只做替换处理,不做运算处理。

2、const的用法

①const定义常量

例如:const  int  NUM = 1024;//注意,必须进行初始化

②const用于指针

例如:int  a = 12;

   int b = 45;

   const int *pa = &a;//pa是变量,可以修改pa的值;*pa是常量,不能通过修改*pa的值来修改a

   pa = &b;              //是合法的语句

   *pa = 4;               //是非法的语句

   int  *const  pb = &b;//pb是常量,是不能修改的;*pb是变量,可以通过修改*pb的值来修改b

   pb = &a;              //是非法的

   *pb = 12;             //是合法的


③const用于函数

当const用于修饰函数的形参时,在函数的内部是不能修改此值的:

void  f(const char *str);//在函数的内部是无法修改str所指向的内容

void  f (const class& ref);//在函数的内部是无法修改引用ref的所引用的变量的值

④const用于类内部

const数据成员是存在的,但并不是像我们想象的那样。const数据成员只在类的某个对象的生命周期内是常量,而对于整个类而言任然是变量。因此const数据成员不能在类声明的时候进行初始化,应在类的构造函数初始化列表中进行初始化。

例如:class A{

const int NUM= 10;//错误,不能在类声明中初始化常量

char  len[NUM];       //错误,未知的NUM

}

   class A {

const int NUM;

A(int num);//构造函数

}

A::A(int num):NUM(num)   //初始化列表中,初始化常量

{

........

}

你可能感兴趣的:(C++)