C++中const的一个用法

RoadingAnt 2009-04-12 10:55:28
下面这段代码编译有错,我想知道出错的具体原因是什么
const int* pHeap = new int;
delete pHeap;//出错
pHeap = NULL;
...全文
138 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjjdebug 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 bebusy 的帖子:]
下面这段代码编译有错,我想知道出错的具体原因是什么
const int* pHeap = new int;
delete pHeap;//出错
pHeap = NULL;

[/Quote]
vc6 下出错信息为:
error C2665: 'delete' : none of the 2 overloads can convert parameter 1 from type
说明:
const int *pHeap, 说明指针所指内容是const. 该内容不能删,也不能改。
例如 :const int *p=5; *p=8 会有编译错误。
int * const pHeap 说明该指针是const, 此时若让pHeap 指向别处会报错,
例如: int *cont p=5, p=NULL 会报错。
原则,const 靠的谁近,它修饰的就是谁。
passionboy03 2009-04-12
  • 打赏
  • 举报
回复
不好意思,跟int* const pHeap弄混了…… ;
[Quote=引用楼主 bebusy 的帖子:]
下面这段代码编译有错,我想知道出错的具体原因是什么
const int* pHeap = new int;
delete pHeap;//出错
pHeap = NULL;
[/Quote]
xtjqu 2009-04-12
  • 打赏
  • 举报
回复
不该有错
是用的托管C++吧,这个东西用DEBUG会报错,用RELEASE就不会了
passionboy03 2009-04-12
  • 打赏
  • 举报
回复
在这儿pHeap 相当于一个常量,例如111,编译器可不允许你delete 111,呵呵
[Quote=引用楼主 bebusy 的帖子:]
下面这段代码编译有错,我想知道出错的具体原因是什么
const int* pHeap = new int;
delete pHeap;//出错
pHeap = NULL;
[/Quote]
beifengchuiqi 2009-04-12
  • 打赏
  • 举报
回复
学习了。。
  • 打赏
  • 举报
回复
这还真看编译器,语法上不能说有错。
chenlin0604 2009-04-12
  • 打赏
  • 举报
回复
这个问题我也没有试过,不过从理论上来分析的话:const关键字是修饰指针所指向的空间的内容是不课改变的,对指针并没有const关键字修饰,所以我觉得不应该有错啊
要么是没有初始化指针所指向的空间?(我猜测的)。
Sco_field 2009-04-12
  • 打赏
  • 举报
回复
应该是没有问题的。
const是const,delete是delete,两者没有必然的关系。
可能是你的编译器不支持这种用法而已。
lzr4304061988012 2009-04-12
  • 打赏
  • 举报
回复
ms vs2008可以通过。
lzr4304061988012 2009-04-12
  • 打赏
  • 举报
回复
delete
会调用void operator delete(void *);
const void *不能转化void *
delete const_cast<int *>(pHeap);
hzhxxx 2009-04-12
  • 打赏
  • 举报
回复

没有错误啊,我用 vc2003 运行了啊,理论上也没有错误啊.
erwin1984 2009-04-12
  • 打赏
  • 举报
回复
用了 const 修饰的指针不能对其指向的内容作操作,这就是const约束的作用,避免在编写代码的时候出现一些无意识的逻辑错误.

const int* pHeap = new int;
delete pHeap;//出错

因为 delete 参数只能为不是 const 修饰的指针, 所以不能对pHeap指向操作,同理类似 pHead[0] = 1; 这类操作都是不允许的.
RoadingAnt 2009-04-12
  • 打赏
  • 举报
回复
1楼和13楼的解释都对,但是都不是针对我提的问题的,但还是谢谢你们了,呵呵
RoadingAnt 2009-04-12
  • 打赏
  • 举报
回复
谢谢,我懂了

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧