论坛首页 编程语言技术论坛

感觉C++的STL就是鸡肋啊

浏览 27662 次
精华帖 (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之上。这些代码都是经过了长久的考验,无论是跨平台,效率,可靠性都是经受了考验的。

用好一门语言,好好做出点东西。不要老是怀疑某某语言不好。语言的存在都有其适合的领域及价值!
0 请登录后投票
   发表时间: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++的标准库都是遵守契约设计的,所以写代码需要多花点精力。
0 请登录后投票
   发表时间:2011-08-04  
C++就老是怀疑C不好, 结果做出来更不好.
0 请登录后投票
   发表时间:2011-12-28  
强强爱妍妍 写道
std::string s = NULL;

这tmd会抛异常,无形中增加了很多参数check的代码,气愤!


所以有人推荐用0不用null
0 请登录后投票
   发表时间:2011-12-31  
C.J. 写道
杀鸡当然不用牛刀
但只会杀鸡的人 也不能说牛刀垃圾吧


应该说成“但只杀鸡的人 也不能说牛刀垃圾吧”
0 请登录后投票
   发表时间:2012-02-15  
fanasy 写道
强强爱妍妍 写道
std::string s = NULL;

这tmd会抛异常,无形中增加了很多参数check的代码,气愤!


所以有人推荐用0不用null



这不是C++代码,不能老用C的思想写C++ ,

包括楼上一些同学的  char * ,这也不是C++中应该出现的。

0 请登录后投票
   发表时间:2012-03-17  
prettyinsight 写道
感觉无论是用C还是C++写的系统都会自己去实现一套string,链表以及其他的一些数据结构。泛型容器虽然功能强大,但是感觉无用武之地。大家在实际项目中会使用STL吗?

自己实现,哈哈。基本上从你的话,可以看出你实现的东西绝对不会比STL的更好。当然自己实现以下,当时联系编程是无可厚非也鼓励的。你自己实现的东西可能在某些特殊情况下会比STL适用,这是可能的。但是就综合情况来说,你写的不可能比 STL更好。

如果你感觉泛型容器无用武之地,说明你还要好好继续学习。
0 请登录后投票
   发表时间: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++的库。
0 请登录后投票
   发表时间:2012-03-17  
ppgunjack 写道
稍微优点名气的大点的库都有自己的string,但string的现状不能说明stl的现状
stl的最大限制应该不是说stl本身实现不好而是c++的模板机制带来的链接限制


什么链接限制?
0 请登录后投票
   发表时间:2012-03-17  
强强爱妍妍 写道
std::string s = NULL;

这tmd会抛异常,无形中增加了很多参数check的代码,气愤!


给对象直接赋值为NULL, 当然是不正确的写法。应该是给指针变量才能赋值为NULL. Java代码写多了?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics