Javaer 双修C++的key point

转:
作者:江南白衣
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系列有趣得多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值