C++中的const的内存分配问题

在c++我们知道一般是采用const来进行替代#define的。

例如:

const int N=3;//注意采用的是赋值的形式并且末尾有分号#define N 3

在C中我们知道#define进行预定义的某个数是被分配内存的,其文件在编译预处理过程中就会用定义好的数据去替代文中的符号。

但是const却是不一样的,一般情况下编译器也是不为const创建空间的,只是将这个定义的数字保存在符号表中的。但是在下列几种情况下编译器会为const定义的常量分配内存的。

1.使用了extern头

extern const int N=3;因为使用了extern我们将可能在外部文件使用N,而const默认的是内部链接,所以我们必须要为之分配内存的。

2.取地址操作

#include<iostream>using namespace std; const int M=3;int main(){constint *p=&M;//当编译器发现有对const定义的常量进行取地址操作时候会对M进行内存分配,//注意这个地址是const int*类型的,地址中的内容不可以改变的int *pp=(int*)(&M)//此处我们将const int*类型强制转化成int * 但是对于*pp的任何赋值操作还是会报错的,//因为本质上的M是常量不可改变的,这也是const的优点cout<<*p<<endl;return 0;}3.const定义的常量未知的时候,这是#define无法实现的。

#include<iostream>using namespace std;int main(){const int b=cin.get();//此处const定义的b是未知的所以要为它分配内存,,但是一旦分配就不可以改变的。//但是如果读者此处想在利用未知的const常量来定义数组还是会报错的。//即int array[b]是不行的,因为编译器在从上往下走的时候是要确定数组的大小的//但是采用new操作就不会报错的int *array=new int(b);cout<<b<<endl;return 0;}

更有一种逍遥,浑然忘我,与大自然交融的境界令人心弛神往。

C++中的const的内存分配问题

相关文章:

你感兴趣的文章:

标签云: