Javaer 双修C++的key point

本文介绍C++编程入门要点,建议将C++当作Java的姊妹语言,忘掉C语言。给出编程实践建议,如用STL的string、vector等,用Boost的smart pointer,使用STL异常机制等。还推荐了必备读物和益智读物,帮助C++程序员学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:江南白衣

关键是把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 <boost tokenizer.hpp=""></boost>
#include <boost lexical_cast.hpp=""></boost><boost lexical_cast.hpp=""></boost>
<boost lexical_cast.hpp=""></boost>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 ( " Useshared_ptr " ));

4.使用STL 异常机制,不用C式的Return Error Code 机制
抛出标准的exception ,不要抛int,string等,一如Java。
何时用返回值,何时用Excetpion的判断,亦一如Java。

try
{
throw exception( " error " );
}
catch (exceptione)
{
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、付费专栏及课程。

余额充值