对const和引用的新理解

来源:互联网 发布:淘宝淘宝客怎么开通 编辑:程序博客网 时间:2024/05/22 00:21

一:const专题:

在c语言中,const实际是一个冒牌货,例如,const int a=10;a是一个只读的常量,通过指针可以绕过去

在c+中,通过const 修饰的东西,会变成什么样子?

1.const int a=10;放入符号表里,始终从符号表里拿数据,a变成真正意义上的常量10

keyvaluea10c++里面的符号表

1.通过代码来理解

const int a;

int const b;

 

const int *c;

int * const d;

const int * const e ;

 

含义:

//第一个第二个意思一样 代表一个常整形数

//第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)

//第四个 d常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)

//第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

结论:

C语言中的const变量:

C语言中const变量是只读变量,有自己的存储空间

C++中的const常量:

可能分配存储空间,也可能不分配存储空间  

const常量为全局,并且需要在其它文件中使用

当使用&操作符取const常量的地址

符号表、编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)

例子代码:

int main()

{

const int a = 10;

int *p = (int*)&a; 

printf("a===>%d\n", a);

*p = 11;

printf("a===>%d\n", a);

 

printf("Hello......\n");

return 0;

}

C++中的const常量类似于宏定义

const int c = 5; #define c 5

C++中的const常量在与宏定义不同

const常量是由编译器处理的,提供类型检查和作用域检查

宏定义由预处理器处理,单纯的文本替换


二.引用专题

1、 引用是C++的概念,属于C++编译器对C的扩展

int main()

{

int a = 0;

int &b = a; //int * const b = &a

     b = 11;  //*b = 11;

 

return 0;

}

2. 普通引用有自己的空间吗?//有

struct Teacer {

int &a;

int &b;

};

int main()

{

printf("sizeof(Teacher) %d\n", sizeof(Teacer));

system("pause");

return 0;

}

3.当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针)








原创粉丝点击