转:
作者:江南白衣
http://www.blogjava.net/calvin/archive/2005/10/10/15132.html
关键是把C++当作Java的sister,无关C事。
所以不要买〈C/C++.....〉为名的书,入门推荐〈Essential C++〉的中文版之类,开篇就讲C++/STL。
如果不幸学校里已经学了C,想办法忘掉它。
1. 用STL的 string ,不用char* 和strcpy()
辅以Boost的Tokenizer实现Java的Tokenizer
conversion/lexcial_cast实现字符串<->数值转换。
Regex实现正则表达式。
#include
#include
void main()
{
string str="haha,hehe";
tokenizer<> tok(str);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg)
{
cout << *beg << endl;
}
int i = lexical_cast<int>("123");
string s = lexical_cast<string>(123);
}
需要调用C API时,const char* cs = str.c_str() 转换。
2. 用STL的vector,不用 C式的array
vector在STL容器里也是首选的容器。
如果需要批量给vector赋初始值时,使用Boost的Assign.
如果容器内需要装载多种数据类型,使用Boost的Any.
#include <boost/any.hpp>
#include <boost/assign.hpp>
void main()
{
vector<any> vec;
vec+=1,"hello";
}
需要调用C API时,&vec[0] 指向第一个元素
3.用Boost 的smart pointer,尽量少用普通指针
统一使用Boost的shared_ptr,解决诸如两个对象同时拥有第3个对象,异常处理和忘记delete的问题。当然,如果refrence可用的时候,就连指针都不要用了,可怜java下用惯了new。
shared_ptr<string> p2 ( new string("Use shared_ptr "));
4.使用STL 异常机制,不用C式的Return Error Code 机制
抛出标准的exception ,不要抛int,string等,一如Java。
何时用返回值,何时用Excetpion的判断,亦一如Java。
try
{
throw exception("error");
}
catch (exception e)
{
cout<<e.what()<<endl;
}
5. Keep it simple
不使用C式的特性如#define。
尽量不要运算符重载。
为了整个团队和日后的维护,更加尽量不用Template、STL、Boost 中复杂陌生的东西,如type traits, Typelist, mpl,lambda,bind....
STL 似乎是个分水岭,从此C++ 不断的向学院派,复杂化发展--TR1、TR2到0x。而Java,C#们则始终保留基本语言的特征,通过不断的制定更多实用的类库、规范,抢占越来越多的市场。
6. 必备读物
2006年入行的C++程序员是幸福的,因为又多了两本实用读物的中文版,〈C++必知必会C++ Common Knowledge )〉和两位老怪返璞归真之作〈C++ Coding Standard〉,两本都是2005年新鲜写好的书,可以用来淘汰掉上一代的一大堆所谓必备书籍。
7. 益智读物
某人说过,决定学一门新语言,需其能给自己的思维模式带来冲击。
所以,推荐下面三本能带来冲击的益智读物:
〈Modern C++ Design - Generic Programming and Design Patterns 〉
〈C++ Templates - The Complete Guide〉
〈C++ Template Metaprogramming Concepts,Tools and Techniques from Boost and Beyond 〉
上面的书虽然不赞成其复杂性而限制在大团队中运用,但对个人智力来讲就大有裨益,比那些在语言规范、编译器下绕来绕去的Effective系列Exceptional系列有趣得多。
分享到:
相关推荐
toBeTopJavaer,成为Javaer-JavaSouthType.zip
成为顶尖Javaer - Java工程师成神之路 主要版本 更新时间 备注 v4.0 2022-05-20 知识体系完善,知识点补充 v3.0 2020-03-31 知识体系完善,在v2.0的基础上,新增20%左右的知识点 调整部分知识的顺序及结构,方便...
javaer-roadmap Github上已经有很多 java及周边技术的优秀项目,发现深度有余,广度不足。所以本项目不在深度上继续扩展,而在广度上给大家分享一些当前职场火热的技术导航。其中包括相关的、书籍、资料、网站等。...
成为顶尖Javaer - Java工程师成神之路 主要版本 更新时间 纪要4.0版 2022-05-20 知识体系完善,知识点补充3.0版 2020-03-31 知识体系完善,在v2.0的基础上,新增20%左右的知识点调整部分知识的顺序及结构,方便阅读...
讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。
【软工1503-Javaer 集-信息盾-用户需求说明书-V1-201909281】文档描述了一个旨在保护快递业务中用户隐私的项目——"信息盾"。该项目主要关注如何在快递过程中保护用户的个人隐私信息,如姓名、电话和地址等,以防止...
标题中的"Gmail API for Java"指的是使用Java编程语言与Google的Gmail服务进行交互的一系列API接口。...通过Java中的Gmail API,我们可以实现自动化邮件处理、邮件通知、邮件分析等多种功能。 ...虽然描述本身为空,但...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
在数字化时代,人们逐渐习惯了使用智能设备记录生活点滴,而电子日记本系统的诞生正是为了迎合这一趋势,满足用户记录日常心情、活动等需求。电子日记本不仅能够提供私密的文字记录空间,还能通过多媒体形式让用户更...
《电子日记本设计与实现-用户需求说明书》 在当今数字化时代,电子日记本逐渐取代了传统的纸质日记,成为人们记录生活、表达情感的新选择。本文档详细阐述了一个专为安卓用户设计的电子日记本软件的开发需求,旨在...
《电子日记本设计与实现:用户需求详解》 在当今数字化时代,传统的纸质日记已无法满足用户多样化的需求。为了适应这种变化,一款集文字、图片、声音于一体的智能电子日记本应运而生。本文将详细阐述这款针对安卓...
成为Javaer的榜首-Java工程师成神之路主要版本更新时间备注v3.0 2020-03-31知识体系完善,在v2.0的基础上,再增加20%左右的知识点调整部分知识的顺序及结构,方便阅读和理解通过GitHub Page构建,方便阅读v2.0 2019...
通用语言 Java程序员编写的类似common-lang工具包包名就是要用大驼峰,不想改成go规范的包名。... string)布尔IsAnyEmpty(list ... string)布尔IsAnyNoneEmpty(list ... string)布尔IsBlank(str字符串)bool ...
java8 源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 ...
后端javaer的福音!这是一个基于vue-element-admin的基础模板vue-admin-template改造+简化而来(例如,加入了标签导航,国际化等等),可以让非专业前端的javaer快速上手的前后端分离项目(前端部分),相信你在日常开发...
Java 注释引言个人博客網上訪問Dreamcats 的公众号访问链接DreamCats類型 名称 源小... 其他類型 名称 源其他 免费编程书籍 电子书基金会其他 计算机专业电子书下载 IT 码农其他 计算机专业电子书下载-2 javaer 路线图
JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了那些jar包中 对jar包上了数量的工程特别有用,而且是GUI界面的 真是人见人爱,见人爱人,javaer 的居家旅行必备
Github | 吉特为什么会有这个开源知识库知识库取名toBeBetterJavaer,即To Be Better Javaer,意为「成为一名更好的Java程序员」,是我自学Java以来所有原创文章和学习资料的大聚合。内容包括Java基础、Java ARM...
目的本着开源的精神,为了让广大Javaer不浪费搜索的时间和金钱,可以快速的浏览/学习面试最常见的知识点,我创建了这个存储库。适合阅读人群面向校招相关专业的大学生。准备面试的Java初/中级工程师。希望掌握Java最...
bbs-go是一个使用Go语言搭建的开源社区系统,采用前后端分离技术,Go语言提供api进行数据支撑,...如果你正在学习Go语言,或者考虑转Go语言的Phper/Javaer...那么该项目对你有的学习会有很大的帮助,欢迎一起来交流。