免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 芙蓉
打印 上一主题 下一主题

const,C/C++的第一个败笔 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2008-01-07 21:12 |只看该作者
其实 const出现场合最多的恐怕不是代码中而是面试的卷子上。。。

论坛徽章:
0
72 [报告]
发表于 2008-01-07 21:20 |只看该作者
顶楼上的

STL库用起来确实比较麻烦,特别是如果不搞清楚里面实现的话,用它写出来的代码效率极低
当在一个很大的系统里调试一个奇怪bug的时候,简直无法忍受,像要吐血了,呵呵

论坛徽章:
0
73 [报告]
发表于 2008-01-07 22:50 |只看该作者
我看好D语言

论坛徽章:
0
74 [报告]
发表于 2008-01-08 02:32 |只看该作者
确实是那样的哈哈`不错哈哈我喜欢哈哈顶了哈哈`我也试过 确实是那样的哈哈`

论坛徽章:
0
75 [报告]
发表于 2008-01-08 09:40 |只看该作者
原帖由 whyglinux 于 2008-1-4 20:50 发表
>> 经过越来越多的教训,偶不得不说,const,是C/C++历史上最失败的发明

在 C 语言产生之初,并没有 const 关键字。const 的引入是在 C 标准化的时候。你的这种论调是在怀疑制定标准的那些人以及站在他们身后 ...


同意你的说法!再补充一句:代码不是写给你自己一个人看的!就算是写给你自己一个人看的,你能保证你1年前写的代码你还能清楚的记得么?为了避免后人以及1年后的自己犯错误,请在应该使用const的地方,使用它!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
76 [报告]
发表于 2008-01-08 11:28 |只看该作者
一直学不会C++的C语言死忠飘过

可重入的函数不需要const把关

论坛徽章:
0
77 [报告]
发表于 2008-01-08 14:48 |只看该作者
原帖由 beepbug 于 2008-1-6 09:13 发表
哦,我自以为讲得很明白了。那我再展开说。
技术,绝大多数技术,来源于需求。有需求,才有技术,才有技术的进步。
在const之前,是用#define来解决符号常数问题的。你至少该比较一下这两者的优劣吧?看看,#define之前,人们是怎样过日子的,有了#define后,人们如何过日子,等有了const,人们又是如何过日子的。


汗。。这位GG,定义常熟最好的办法还是用enum吧。
用const定义常熟,至少有两个缺点:
1. 兼容性不容enum,比如class内部的常数成员
2. 占用memory空间
一个有点:可以有不同类型

论坛徽章:
0
78 [报告]
发表于 2008-01-09 11:07 |只看该作者
const的用法太复杂了,很容易犯错误,恐怕没几个人能彻底搞清楚const的用法。
不像define和enum,直截了当,define只要注意加括号基本就不出错。
本来用这些东西是为了方便,结果反而弄得很复杂,所以没多少人愿意用 const。

论坛徽章:
0
79 [报告]
发表于 2008-01-11 15:10 |只看该作者
原帖由 芙蓉 于 2008-1-8 14:48 发表
汗。。这位GG,定义常熟最好的办法还是用enum吧。
用const定义常熟,至少有两个缺点:
1. 兼容性不容enum,比如class内部的常数成员
2. 占用memory空间
一个有点:可以有不同类型

我没汗,这里气温低。
我要做一个符号常数,你能做到不占memory?

论坛徽章:
0
80 [报告]
发表于 2008-01-11 15:45 |只看该作者
原帖由 beepbug 于 2008-1-11 15:10 发表

我没汗,这里气温低。
我要做一个符号常数,你能做到不占memory?


(这样锱铢必较可能的确令人发汗)
您可以用以下代码比较一下,使用const和使用enum占用的空间差异。
虽然我用gcc,只看到1K的差距,
但是在实际项目里,当const比较多时,模板推导复杂时,差出几百K是常有的事,
如果用在内存紧凑的场合,就不得不考虑了

  1. //#define USE_CONST

  2. template<int n>
  3. struct test
  4. {
  5. #ifdef USE_CONST
  6.         static const int value;
  7. #else
  8.         enum { value = test<n - 1>::value + 1 };
  9. #endif
  10. };

  11. #ifdef USE_CONST
  12. template<int n>
  13. const int test<n>::value = test<n-1>::value + 1;
  14. #endif


  15. template<>
  16. struct test<0>
  17. {
  18. #ifdef USE_CONST
  19.         static const int value;
  20. #else
  21.         enum { value = 0 };
  22. #endif
  23. };

  24. #ifdef USE_CONST
  25. template<>
  26. const int test<0>::value = 0;
  27. #endif



  28. int main()
  29. {
  30.         return test<499>::value;
  31. };
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP