c++ #define 和 const 有什么区别?
1.
在c语言中,const的意思是“一个不能被改变的普通变量”,它总是占用存储空间而且它的名字是全局的。c编译器不能把const堪称一个编译器间的常量。所以在c中你可以这么写:
const
int
bufsize;//不赋值。
但不能这么写:
cosnt
bufsize
=
100;
char
buf[bufsize];
//因为bufsize不是常量。
但是在c++里,上面两种情况正好反过来。在c++里const修改的量表示常量,必须在初始化时赋值,并且可以作为数据的维数
php中const和define的区别
下面使用#define和const定义常量:
复制代码
1 #define n_define 10
2
3 int main(int argc, char* argv[],int _version)
4 {
5 const int n_const=20;
6 int *p=(int *)&n_const;
7 *p=30;
8 printf("%d",*p);
9 printf("\n%d",n_define);
10
11 return 0;
12 }
复制代码
上述代码所对应的汇编代码如下:
复制代码
1 mov [ebp+var_4], 14h ;n_const的十六进制
2 lea eax, [ebp+var_4]
3 mov [ebp+var_8], eax ;int *p=(int *)&n_const
4 mov ecx, [ebp+var_8]
5 mov dword ptr [ecx], 1Eh ;*p=30
6 mov edx, [ebp+var_8]
7 mov eax, [edx]
8 push eax
9 push offset asc_432020 ; "%"
10 call printf
11 add esp, 8
12 push 0Ah ;n_define的十六进制
13 push offset aD ; "\n%d"
14 call printf
15 add esp, 8
复制代码
汇编代码1-11行对应C++代码5-8行。从汇编代码可以看得出来,在底层const常量和变量没区别。也就是说const定义的是假常量,本质上还是个变量,只不过编译器限制了我们对const常量的修改。而由#define定义的则不同。汇编代码第12行可以看出,编译器已经偷偷做了“手脚”:编译器将n_define替换成了0Ah,而这一步替换是发生在预处理阶段。n_define所对应的20已经变成了二进制,且在指令里面是属于立即数了。所以如果对n_define进行&n_define将会出错。
众所周知,在PHP中(PHP 4及以后),我们可以使用函数define()来定义常量,例如:
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!