免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9048 | 回复: 11
打印 上一主题 下一主题

[C++] 在C++编程中,常量定义都用const,不用#define 理由是什么呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-07 09:21 |只看该作者 |倒序浏览
最近在学习C++,突然有这么一个问题:常量的定义有两种,在C中定义常量的方法是用编译预定义指令(#define)。预处理在编译之前,所以会把程序中所有字符替换掉,然后通过编译生成执行文件,另一种在C++编程中,常量定义都用const,它是在编译过程中处理,有点不明白的是,两者有什么区别呢,而C++不提倡用(#define),而const又有什么优势呢?

论坛徽章:
0
2 [报告]
发表于 2006-08-07 09:27 |只看该作者
你是怎么定义的是int const* ip?还是const int *ip?

论坛徽章:
0
3 [报告]
发表于 2006-08-07 09:36 |只看该作者
原帖由 无聊的风 于 2006-8-7 09:27 发表
你是怎么定义的是int const* ip?还是const int *ip?


答非所问, int const* ip 与 const int *ip 在 C 与 C++中一样的

const 定义常量可能让编译器检查类型

论坛徽章:
0
4 [报告]
发表于 2006-08-07 10:05 |只看该作者
1。const定义常量是有数据类型的,而#define宏定义常量却没有。
           这样const定义的常量编译器可以对其进行数据静态类型安全检查,而#define宏定义的常量却只是进行简单的字符替换,没有类型安全检查,且有时还会产生边际效应(不如你愿处)。所谓边际效应举例如下:
           #define N 100
           #define M 200 + N
           当程序中使用 M*N 时,原本想要 100 * (200+ N )的却变成了 100 * 200 + N。
     2。有些调试程序可对const进行调试,但不对#define进行调试。
     3。当定义局部变量时,const作用域仅限于定义局部变量的函数体内。但用#define时其作用域不仅限于定义局部变量的函数体内,而是从定义点到整个程序的结束点。但也可以用#undef取消其定义从而限定其作用域范围。

论坛徽章:
0
5 [报告]
发表于 2006-08-07 10:08 |只看该作者
原帖由 mik 于 2006-8-7 09:36 发表


答非所问, int const* ip 与 const int *ip 在 C 与 C++中一样的

const 定义常量可能让编译器检查类型


我猜他想说的是const int* ip 与 int* const ip  

论坛徽章:
0
6 [报告]
发表于 2006-08-07 10:13 |只看该作者
理解#define,它的名字是宏替换,并且重音在替换,也就是不论你写的是什么,都原封不动的替换在代码引用的地方,跟const相比其实不是一个东西,只不过效果有时候相似罢了。

在有些场合,const跟#define都能做到,但const做的更好,更健壮;在有些场合,#define能做到,const做不到

论坛徽章:
0
7 [报告]
发表于 2006-08-07 10:17 |只看该作者

webworld

相同点:
     C中的#define和C++中的const都可以定义常量。
    #define也可以定义带参数的宏,C++中使用inline函数来代替。
    在C++中支持#define是因为要兼容C。
不同点:
   #define不检查其后定义的字符串,哪怕是分号也可以通过预编译,如 #define PI 3.1415926;
实际中PI的值是“3.1415926;”注意到分号了吗?它是没有类型的常量名。
     const检查定义的类型,如 const float pi = 3.141592653,实际的pi是3.141593,因为float类型的有效位限制。
   #define任意定义,而const是有类型要求,根据不同的情况,使用不同的定义方式!!
   本人认为C++没有不提倡#define,只是对其功能做改进,但是改进后是否同样有效或是更优于#define那?
还是个疑问!!

论坛徽章:
0
8 [报告]
发表于 2006-08-07 10:30 |只看该作者
多谢各位!!

论坛徽章:
0
9 [报告]
发表于 2006-08-07 10:32 |只看该作者
#define 定义的是真正的常量
const是对变量的修饰,使得程序中无法直接改变其数值。但它修饰的变量可以通过指针间接地修改。

论坛徽章:
0
10 [报告]
发表于 2006-08-07 10:57 |只看该作者
原帖由 思一克 于 2006-8-7 10:32 发表
#define 定义的是真正的常量
const是对变量的修饰,使得程序中无法直接改变其数值。但它修饰的变量可以通过指针间接地修改。

const 防君子不防小人,define 君子小人统统暴打 50 大板...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP