C++编程中const和#define的区别

主要区别有哪些?说的详细一点,谢谢

(1) 编译器处理方式不同
  define宏是在预处理阶段展开。
  const常量是编译运行阶段使用。
(2) 类型和安全检查不同
  define宏没有类型,不做任何类型检查,仅仅是展开。
  const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
  const常量会在内存中分配(可以是堆中也可以是栈中)。

(4)const 可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。
(5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-15
你就百度下const 就知道了,百度百科上介绍的已经够好的了

C++编程中const和#define的区别
用define可以定义一些简单的函数,const是不可以定义函数的.

const和define的区别
1、const生效于编译的阶段;define生效于预处理阶段。预处理在编译之前,预处理器将源代码中的宏统一替换为指定的字符。从语义上讲,const是声明一个不可修改的数据,而define则是在对源代码进行替换。2、const定义的常量,在C语言中是存储在内存中、需要额外的内存空间的,只有C++才不会为其分配内存、...

C++ 令#define和关键字const定义符号变量的不同
输出结果上没有区别。但是在实际编译和运行时是不同的:预处理命令#define是在编译前便已经将宏调用替换为宏体了,所以是变量。但是const定义的量只有在程序加载到内存中后才确定它的值,也就是具有变量的性质,只不过它的值不允许更改而已。

C语言编程技巧 关于const和#define的区别心得
首先需要说明的是c和c++,const的区别是很大的。在c里面,const不是真正的const,const可以通过指针修改变量的值。但是在c++里面,const通过指针改变不了变量的值。define只是简单的替换,没有词法语法分析。define定义的值不能通过指针改变。

C++中const变量优于#define的主要原因是什么?
const 也是ISO C\/C++的语言特性,但是在C\/C++中有些区别。严格来说,#define定义符号常量和const定义常量对象各有使用范围,不存在哪个优于哪个的问题。不过仅就C++单一源文件内定义字面量作为符号常量而言,const的主要优点是:define是符号替换,只要定义符合预处理命令的语法,预处理器就不会报错,只...

如何理解c++中的关键字static,const,以及#define在定义
define与static、const不同,属于预处理器的宏。预处理器在编译前执行,进行字符串替换,不遵循语言语法。宏定义的内容直接插入。例如:预处理器替换后,编译器将认为你定义了一个名为fuck、类型为fuck的变量。const代表constant,意为常数或常量。用于修饰变量,表示其不可修改;用于指针,表示指针指向的...

#define和const定义的问题
define 定义的是宏,不是变量。有什么区别呢?如这个程序中,使用 define 时,3.1415 会直接替换掉程序中的 PI,注意是原封不动的替换,相当于是写的 return 3.1415*i*i 。而 const 是定义常量,其实就是值不能被改变的变量,和宏是不一样的。因此,const 只是对变量的修饰,你直接用 const P...

C\/C++ 常量、#define、const和constexpr
C\/C++ 中的常量、#define、const和constexpr提供了不同的常量管理方式,它们在内存管理、类型安全、编译时计算等方面各具特色。- 常量:代表固定不变的值,类型明确,值不可修改,如整型、浮点数等。const和constexpr都允许在编译时初始化,但constexpr要求必须在编译时计算其值。- #define:预处理器宏...

C++中.const 与#define都是定义全局变量的吗?
define只是预编译指令,也就是在编译器编译之前,会把代码里面除了""中的pi外的pi都变成3.1415926,也就是说,编译器是看不到pi这个符号的。而const定义是带有类型的,定义的是变量,它有实际内存,只是这个内存是不可以更改的。所以从C++中提倡使用const变量,而不用#define ...

define和const的区别
从汇编代码可以看得出来,在底层const常量和变量没区别。也就是说const定义的是假常量,本质上还是个变量,只不过编译器限制了我们对const常量的修改。而由#define定义的则不同。汇编代码第12行可以看出,编译器已经偷偷做了“手脚”:编译器将n_define替换成了0Ah,而这一步替换是发生在预处理阶段。n...

相似回答