一些C++连接,以及个人的C++学习总结。

原创 2004年10月17日 00:52:00

以下是本人几年以来学习和开发中的一些积累和总结,欢迎讨论,欢迎B4.

1.  书籍:
    Essential c++ :  入门书籍,读完可以开始写C++代码
    The C++ Programe Language :  C++之父的著作,无微不至,居家旅行必备良书。
    C++ Primier  :  非常完整的C++著作,不过不推荐入门阅读,参考书。
    Effective C++:  Scott Meyers作品,有一定功底以后再读,从此可以称为熟手。
    More Effective C++:  与上篇一样。
    Exceptional C++ :  Herb Sutter作品,Scott Meyers学生,国外的博士就是不一样。
    More Exceptional C++:  与上篇一样。
    Modern C++ Design:  Anders Alexandr著作,俺们最最佩服的神人之一。
    Large-Scale C++ Software Design:  如果你需要参与设计20万行以上的软件,建议阅读,否则还是继续研究设计模式吧。

2.  连接
    Newsgroup:comp.lang.c++ :  古老的新闻组,需要代理才能访问。如果跟我一样懒,不妨试试news.gmane.org,可以使用Outlook Express浏览。
    CUJ :  读大牛们论文的好地方,不过2002年以后的更新都没啥好玩的了。强烈推荐"Generic<Programming>"系列,Anders Alexandr的范型专栏。
    http://www.research.att.com/~bs/C++.html   :  Bjarne Stroustrup的C++联结页面,大量的C++联结信息。

3.  代码库
    STL :  C++的标准模板库,有好几种版本,其中以SGI(GCC默认)的版本最为好使,VC6所带版本最蹩脚。
    Boost  :  非常完善的跨平台C++库,提供智能指针,正则表达式,线程,字符串工具函数等好用的DD。很长时间了网站都没法访问,不过可以通过C-VIEW的镜像访问。
    Loki   :   Anders Alexandr的代码库,设计精巧,提供智能指针,Functor,TypeList等。
    QT :  本来是完美的C++ GUI库,可惜对于商业开发要收取版权费,动辄上千美元,惹不起。
    Xerces :  XML代码库,估计是除.Net Framework的System.XML外最好使的XML库了,对于C++程序员,如果需要完善的XML Core Level3支持,跨平台的,免费的XML库,那就是它了。不过体积可不小。
    Xalan :  XML XSLT支持库,配合Xerces使用,Apache的一贯传统,大而全。
    TinyXml :  如果您的XML只需要支持Ansi和UTF8编码,只需要做些简单的XML解析,TinyXML是很好的选择,小而精。
    ICU :  IBM的Unicode实现,有JAVA和C++/C两种版本,支持各种编码,国际化和本地化功能,但是,很庞大,8M左右。
    libiconv :  GNU的UNICODE实现,提供各种字符集到UNICODE之间的转换功能,1M左右。
    ACE:  C++网络编程库,很完善,使用方便,适合开发服务器。提供网络通讯,消息队列,线程/进程池,各种互斥缩/信号量,以及一整套服务器开发框架,不过目前好像没有提供对epoll的支持。
    cURL :  从名字可以看出来,c操作URL资源的库,完善支持HTTP,SHTTP,FTP等协议,比WinINet好使,与正在“烟酒”中的WinHTTP有一拼。
    FreeImage:  非常完善的图像处理库,设计非常好,用插件的方式支持多种图像格式,GIF因版权问题除外。
    IT++:  专业的数学库。
    GC6.2:  C++垃圾回收器,很好使。GCC自带,Mono中使的也是它。
    libpdf :  生成PDF文件的库,可惜不能读入编辑PDF文件。

    没事去www.sf.net上转转,说不定什么时间就出了极品。

4.  经典论题:
   
    Smart Pointers in Boost  :  http://www.cuj.com/documents/s=8014/cuj0204karlsson/
    Scope Guard : http://www.cuj.com/documents/s=8000/cujcexp1812alexandr/alexandr.htm
    Min Max:  http://www.c-view.org/journal/007/gp_aa.htm,这是译文。

5.  编译器差异:
   
    主要考虑两个编译器GCC和VC6,以及跨平台跨编译器代码中应该注意的一些问题。
    1.  VC6和GCC处理临时变量的const属性的不同处理,例程和解释请参考 这里 。
    2.  VC6和GCC对64位整数的扩展的差异。VC使用__int64,GCC使用long long.
    3.  VC6下的wchar_t为2个字节,GCC下wchar_t为4个字节。
    4.  VC6下对模板的支持bug很多,导致很多代码在VC6下无法编译,详细可以参考一下一个简单的列表。
    5.  VC6下使用__forceinline强制函数为inline,linux下没有办法,但是可以通个编译选项-finline-limit对编译器进行“强烈”建议。
    6.  VC6下使用#pragma comment(lib,libname)可以静态连接库文件,GCC下通过-I和-L选项在Link是连接库文件。

6.  个人观点:
    强烈推荐Learning Standard C++ as a New Language(http://www.research.att.com/~bs/new_learning.pdf),Bjarne Stroustrup的
肺腑之言,就本人的所知,很多人都只是把C++当作带类的C来使,对一些基本的概念比较模糊,比如拷贝构造,赋值构造,深度拷贝,模板,
多重继承,虚集成等概念不大清楚,在代码中又无意中用到,bug也就随之而来。

    忘记模板。STL很伟大,ATL很好使。但是模板实在是一把双刃剑,而且受伤的十有八九是自己。除非用于设计地层的代码库,
否则建议放弃使用模板,因为它,整个工程变得难以维护和调试。是的,可能你很熟悉,维护起来没有问题,可是不是每个人都是模板高手。

    只有两个理由使用宏。第一个,为了优化代码。GCC没有强制INLINE的方法,导致使用宏是唯一确保可行的性能优化手段。其次,为了实现
一些没有宏就实现不了的功能,比如连接字符串(配合##使用),读取当前的行号(__LINE__)。这两种情况以外,建议不要使用宏,特别是
不要使用镶嵌宏,这种代码如果出现bug,只有上帝知道怎么解决。我曾经因为工作需要,花了一年时间维护一个50万代码行的软件,其中充斥
着各种设计精巧,动辄50行的宏。不错,这些宏确实大大减少了整个软件的代码行,可是,发现bug以后,我唯一的办法就是把这些宏重新展开
到函数中去,不然怎么调试?

    项目一开始就对内存泄漏和资源泄漏进行跟踪,最好实现一些进行跟踪的辅助代码。本人曾经实现过一个,如果有兴趣,可以参考讨论,
连接如下。内存泄漏也可以使用一些工具,如bound checker,其它资源就只有靠自己了。

    对于服务器软件开发,写LOG文件是最好的调试方法。

7.  小技巧:
   
    如何让一个类只能被new出来,分配在堆中?
   
    这是一个偶然的机会,和一个朋友讨论的结果,我至今不知道为什么他会有这种需求,但是方法确实找到了。让您先想想,我的解决方法请见这里。

 


 

c++课程学习总结

c++课程学习总结 转眼间,大一生活就在最后一门专业课c++的上机考试结束的那一刻宣告结束。这样的结束,并未让我感到特别的圆满。最后一门考试,专业课c++上机考试,不尽人意,让本应该充满美好回忆的的...
  • u012370419
  • u012370419
  • 2014年07月11日 13:40
  • 1108

C++课程设计总结

最近为了课设过了一段野人般的生活…我也是初步学习MFC,所以很多东西都不甚了解,很多技巧和用法都是综合各家之言而成…有什么不确切的地方,希望大家指正……   首先介绍一下我的程序,没有想到新颖的...
  • ggemini
  • ggemini
  • 2013年04月05日 18:34
  • 852

C++学习小结

1、编译器优化相关(delete和printf) int _tmain(int argc, _TCHAR* argv[]) {  char* p = new char[100];  strcp...
  • qq_20203749
  • qq_20203749
  • 2015年03月08日 11:31
  • 317

C++ 多线程学习总结

先来一个简单的例子,展示如何创建一个线程 #include #include #include using namespace std; unsigned Counter; uns...
  • hust_bochu_xuchao
  • hust_bochu_xuchao
  • 2016年11月08日 11:06
  • 860

C++学习心得体会

                           C++语言程序学习心得体会   学习过C语言后的我们开始学习C++程序语言,我感觉C++语言与C语言有许多异曲同工之处,...
  • l347037341
  • l347037341
  • 2016年06月20日 10:18
  • 2090

C++ 通讯录学习总结

用c++写的简易学生通讯录 http://blog.csdn.net/yuzhihui_no1/article/details/43530445           昨天我一大学室友找到我...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年06月08日 21:15
  • 458

C++课程心得体会

c++是兼容C的面向过程和面向对象的程序设计语言,它涉及程序设计思想、方法、语法、算法等,它的理论性、综合性和实践性比较强,让人感到十分难学,学到一半就学不懂了从而半途而废。初学C++的时候,什么都不...
  • qq_33450452
  • qq_33450452
  • 2016年06月23日 09:12
  • 1063

C++程序员需要掌握的知识(个人总结)

  • CplusplusProgramer
  • CplusplusProgramer
  • 2011年08月23日 00:32
  • 237

个人学习总结一Java的概述

一、了解Java         Java是完全面向对象的、安全可靠、与平台无关的编程语言。         Java的三种技术构架:JAVAEE企业版、JAVASE标准版、JAVAME小...
  • bj_lzx
  • bj_lzx
  • 2014年10月20日 17:43
  • 445

c++课程学习心得

/*  *Copyright (c) 2016,烟台大学计算机学院  *All rights reserved.  *文件名称 :  *作 者 : 徐聪  *完成日期 : 2016年6月23...
  • ccxucong
  • ccxucong
  • 2016年06月23日 08:51
  • 530
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一些C++连接,以及个人的C++学习总结。
举报原因:
原因补充:

(最多只允许输入30个字)