锁定老帖子 主题:感觉C++的STL就是鸡肋啊
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-26
Elminster 写道 C++ 的标准库本身设计非常精良。从历史上看,是通过 STL 的引入才使业界广泛地认识到泛型编程的价值和潜力。而且,STL 作为基础数据结构和算法的库而言,大多数实现是非常优秀的,效率高陷阱少。相对而言,我倒是觉得那些“自搞一套”的方案往往属于粗制滥造,比如那些拿 void* 实现对不同类型数据支持的库。 STL 真正的问题在于 1. C++ 历史包袱太重,2. 改进需要标准委员会批准所以进化太慢,3. 覆盖面不够广。 非常赞同Elminster 的看法。而且后来出现的很多流行的语言或多或少都借鉴了C++泛型的思想,想Java, C#等都是。 曾经看过一本《C++编程艺术》书 该作者说。C#和java的集合类正式建立在C++的STL之上。这些代码都是经过了长久的考验,无论是跨平台,效率,可靠性都是经受了考验的。 用好一门语言,好好做出点东西。不要老是怀疑某某语言不好。语言的存在都有其适合的领域及价值! |
|
返回顶楼 | |
发表时间:2011-08-04
强强爱妍妍 写道 jinti 写道 强强爱妍妍 写道 给你一个char *的参数,然后你要传递给使用std::string类型的接口,这样不得不从char *转到string吧? char *允许NULL, 为啥std::string要抛个异常? 脑子都给异常吃了! CString就很好,它知道我们给它NULL的意思表示空字符串.
:) 在 C++中,为一个变量赋NULL,那代表这个变量是指针。 std::string val = "";或是 std::string val; 都可以。 你没看懂我的意思哇. 以你的例子说,val用一个char *类型的参数来初始化. 这时必须检查这个char *参数是否为NULL. void foo(char* bar) { //当bar是NULL的时候就悲剧了 std::string s = bar; ... } 哦,C/C++的标准库都是遵守契约设计的,所以写代码需要多花点精力。 |
|
返回顶楼 | |
发表时间:2011-08-04
C++就老是怀疑C不好, 结果做出来更不好.
|
|
返回顶楼 | |
发表时间:2011-12-28
强强爱妍妍 写道 std::string s = NULL;
这tmd会抛异常,无形中增加了很多参数check的代码,气愤! 所以有人推荐用0不用null |
|
返回顶楼 | |
发表时间:2011-12-31
C.J. 写道 杀鸡当然不用牛刀
但只会杀鸡的人 也不能说牛刀垃圾吧 应该说成“但只杀鸡的人 也不能说牛刀垃圾吧” ![]() |
|
返回顶楼 | |
发表时间:2012-02-15
fanasy 写道 强强爱妍妍 写道 std::string s = NULL;
这tmd会抛异常,无形中增加了很多参数check的代码,气愤! 所以有人推荐用0不用null 这不是C++代码,不能老用C的思想写C++ , 包括楼上一些同学的 char * ,这也不是C++中应该出现的。 |
|
返回顶楼 | |
发表时间:2012-03-17
prettyinsight 写道 感觉无论是用C还是C++写的系统都会自己去实现一套string,链表以及其他的一些数据结构。泛型容器虽然功能强大,但是感觉无用武之地。大家在实际项目中会使用STL吗?
自己实现,哈哈。基本上从你的话,可以看出你实现的东西绝对不会比STL的更好。当然自己实现以下,当时联系编程是无可厚非也鼓励的。你自己实现的东西可能在某些特殊情况下会比STL适用,这是可能的。但是就综合情况来说,你写的不可能比 STL更好。 如果你感觉泛型容器无用武之地,说明你还要好好继续学习。 |
|
返回顶楼 | |
发表时间:2012-03-17
ray_linn 写道 mathgl 写道 Elminster 写道 自己实现一套 string 、链表和其他数据结构?在有 STL 的前提下这太蛋疼了 ⋯⋯
很久很久前。stl还没个定稿前。。string的实现到处可见............ 不过c++ 我现在用得最多的就是 std::string, std::vector, std::map, std;;pair.... 比如MFC里有CString,俺用这个用得多 MFC里面用CString无可厚非,也是可以的选择。但是如果你的项目的某些某块可能被跨平台使用,建议使用标准C++的库。 |
|
返回顶楼 | |
发表时间:2012-03-17
ppgunjack 写道 稍微优点名气的大点的库都有自己的string,但string的现状不能说明stl的现状
stl的最大限制应该不是说stl本身实现不好而是c++的模板机制带来的链接限制 什么链接限制? |
|
返回顶楼 | |
发表时间:2012-03-17
强强爱妍妍 写道 std::string s = NULL;
这tmd会抛异常,无形中增加了很多参数check的代码,气愤! 给对象直接赋值为NULL, 当然是不正确的写法。应该是给指针变量才能赋值为NULL. Java代码写多了? |
|
返回顶楼 | |