| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2992 人关注过本帖
标题:用const定义常量比用define定义常量有什么好处?
只看楼主 加入收藏
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
 问题点数:0 回复次数:14 
用const定义常量比用define定义常量有什么好处?
请问:用const定义常量比用define定义常量有什么好处?
搜索更多相关主题的帖子: const定义 define定义 常量 
2006-03-04 21:15
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 
我的意见:1、类型检查,2、减少重复计算

for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-03-05 00:24
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 
const定义的常量也有地址
也有作用域就像正常的变量一样
如果定义了xx对象为const的话,然后试图修改它,编译器就会报错//
而define定义的常量却没有地址
它只是一个符号
告诉编译器:"我是不能变的"

自强不息:)
2006-03-05 22:46
疯之子rlb
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-3-1
收藏
得分:0 
re:3楼的大哥,如果define定义了一个对象的话,
然后试图修改它,编译器就会报错吗?

请回答!!
2006-03-05 23:32
liang200
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-3-6
收藏
得分:0 
当然啦,你不会在C++里试试的!!!
2006-03-06 08:06
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 
以下是引用wanglff在2006-3-5 22:46:00的发言:
const定义的常量也有地址

我认为这句有失偏颇:
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
最后那个在有些地方叫做:“符号表”。
当你定义了一个常量时,C++编译器会把它放在符号表里(我想引用也是这种机制),所以当你用到该常量时,会从符号表里查找。但是,当你用到了该常量的地址,如 const int i=10; const int *p=&i;,那么该常量才会拥有一个可以使用的内存地址。


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-03-06 13:07
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
以下是引用DarkHero在2006-3-6 13:07:00的发言:

我认为这句有失偏颇:
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
最后那个在有些地方叫做:“符号表”。
当你定义了一个常量时,C++编译器会把它放在符号表里(我想引用也是这种机制),所以当你用到该常量时,会从符号表里查找。但是,当你用到了该常量的地址,如 const int i=10; const int *p=&i;,那么该常量才会拥有一个可以使用的内存地址。

堆、栈、自由存储区、全局/静态存储区和常量存储区,这几个存储区的内存范围我们可以自行定义吗?那我们又是在哪定义它们的范围呢?


谷底深深行 ,峰顶漫漫步......@_@
2006-03-06 13:48
liang200
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-3-6
收藏
得分:0 

说起来C++中的分区也可以是四个:代码区,全局数据区(包括静态数据),栈区和堆区

2006-03-06 15:19
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 
re:疯之子rlb如果define定义了一个对象的话
然后试图修改它,编译器就会报错
不过在c里面就不会了
这是c的一个漏洞


局变量是动态分配空间的
/静态存储区是你要运行是才分配空间给你用完了就释放
当然你要是用了static的话就不同了
他会一直占用内存空间知道程序结束

自强不息:)
2006-03-06 18:46
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 
以下是引用olivezhang在2006-3-6 13:48:00的发言:

堆、栈、自由存储区、全局/静态存储区和常量存储区,这几个存储区的内存范围我们可以自行定义吗?那我们又是在哪定义它们的范围呢?


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-03-06 19:08
快速回复:用const定义常量比用define定义常量有什么好处?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012648 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved