const限定的是谁

来源:互联网 发布:mac os x u盘重装系统 编辑:程序博客网 时间:2024/04/27 23:34

为毛要有const这么恶心的东西

因为C中常用“ #define  变量名  变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制, 这样预处理在C++中成为可能引发错误的隐患,于是引入const。

const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数。const和define定义的常量可以放在头文件里面。

======================================================================================================================================

想知道它到底修饰谁,只要记住一句话 const是一个左结合的类型修饰符!

int const *A; //A可变,*A不可变,const左结合的是int这个类型,所以这个类型的变量不能变,而指向它的指针可以变
int *const A; //A不可变,*A可变,const左结合的是int *,声明的是一个int的指针,所以这个指针不能变,而指针指向的内容可以变


那就明白了:

int me;
const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
int* const p2 = &me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
const int* const p3 = &me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向


对于第一个,const左结合没有人啊,但是const越过*了吗,没有,所以const int* p1和int const * p1是一样的。


看不懂可以这样记:

const在*左边,指针能变,指向的内容不能变【因为const在*左边,const怎么也左结合不了*,所以限定不了指针啊】

const在*右边,指针不能变,指向的内容能变

const在*左右都有,都不能变。

0 0