C++中的const的内存分配问题
2014-04-09 10:47
204 查看
在c++我们知道一般是采用const来进行替代#define的。
例如:
在C中我们知道#define进行预定义的某个数是不(谢谢网友,打字问题哈哈)分配内存的,其文件在编译预处理过程中就会用定义好的数据去替代文中的符号。
但是const却是不一样的,一般情况下编译器也是不为const创建空间的,只是将这个定义的数字保存在符号表中的。但是在下列几种情况下编译器会为const定义的常量分配内存的。
1.使用了extern头
2.取地址操作
#include<iostream>
using namespace std;
const int M=3;
int main()
{
const int *p=&M;//当编译器发现有对const定义的常量进行取地址操作时候会对M进行内存分配,
//注意这个地址是const int*类型的,地址中的内容不可以改变的
int *pp=(int*)(&M)//此处我们将const int*类型强制转化成int * 但是对于*pp的任何赋值操作还是会报错的,
//因为本质上的M是常量不可改变的,这也是const的优点
cout<<*p<<endl;
return 0;
}
3.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()
{
const int *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++的内存分配问题
- C++成员函数的内存分配问题
- C和C++的内存操作小贴士(一):const char*的内存释放问题
- C/C++程序中致命的内存分配问题
- C++对象内存分配问题
- 关于const和define的内存分配问题的总结
- C/C++结构体内存分配问题详解
- C++程序内存分配的问题
- C++程序内存分配问题
- C++中的内存分配问题
- C++ std::vector元素的内存分配问题(补充)
- C/C++程序中致命的内存分配问题
- C++程序内存的分配问题
- C++内存分配问题若干_1
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- c++中变量的内存分配问题
- C++内存分配问题
- C++内存分配问题
- C/C++中动态内存分配问题
- C++程序变量在内存中的分配问题