免费注册 查看新帖 |

Chinaunix

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

贴一个BitSet类,请大家拍砖^_^ [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-04-21 01:49 |只看该作者

回复 10楼 awake 的帖子

首先感谢你提出的建议,下面是我的一些看法

>> 考虑使用unsigned char代替unsigned long
请说明理由,谢谢。我之所以用unsigned long主要是从移位的效率来考虑的,因为当初的应用中存在大量移位运算

>> 去掉所有的inline关键字
大多数函数比较小,内联比较合适,可能个别需要商榷

>> 把所有的typedef和常数放在class之内
常数只用于类实现,应该放在类内部;但ULONG是提供给用户的接口中的类型,放在头文件中比较合适吧?

>> 不要检查内存分配失败
why?

>> friend函数不必成为friend
其实除了必须实现为friend的接口外,对于其它接口,是实现为friend还是成员函数,我一直不知道以何为标准,请指教

>> operator<<()是否应该为const?
恩,你是对的

>> 考虑使用numeric_limits<unsigned long>::digits。
这个用不着这么麻烦吧?

>> 考虑提供命名操作,如and。
>> 考虑提供swap操作
从执行效率来讲,应该实现swap操作,不然用等价操作代价太大。
其它这类操作还很多,这里并没有完全实现,如果需要可以自己做照写就行了。

论坛徽章:
0
12 [报告]
发表于 2007-04-21 12:30 |只看该作者
呵呵,我也只是按我的经验说的一点想法。

效率的问题,这里我不是很清楚,我建议你测试一下,改起来应该很方便吧。我人比较倾向于使用unsigned char而已。

inline关键字只是一个建议,有些编译器直接忽略了这个关键字。而且究竟什么时候inline,编译器会更清楚。

typedef放在类中也是可以提供给用户的。比如Container::value_type。

不要检查内存分配失败,这一点可以参考《Exceptional C++ Style》。1、似乎从标准上来将,当内存分配失败的时候是不应该返回空指针的。2、很多平台上从来不会出现内存分配失败的情况。3、真正没有内存的时候,你恐怕没有空间抛出异常了。4、其他。

那些friend函数好像没有访问私有成员,为什么要加为friend呢?

据说有些机器上不是每个字节都8位,这应该可以成为使用umeric_limits<unsigned long>::digits的理由了。

论坛徽章:
0
13 [报告]
发表于 2007-04-21 12:59 |只看该作者
>> 那些friend函数好像没有访问私有成员,为什么要加为friend呢?
对,我疏忽了
>> 据说有些机器上不是每个字节都8位,这应该可以成为使用umeric_limits<unsigned long>::digits的理由了。
接受建议,呵呵,不过我还真没见过这种机子

其它我再考虑下下,再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP