More Effective C++

More Effective C++
1,在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象。而指针可以指向空值,而引用不能。因为不存在指向空值的引用,因此引用前不需要检查合法性,所以引用效率高。
2,指针可以被重新赋值以指向另一个不同的对象,但引用总是指向在初始化时被指定的对象,以后不能改变。
3,重载某个操作时应该使用引用。
4,当知道指向一个对象并且不想改变其指向时,或者在重载操作并为防止不必要的语义误解时,你不应该使用指针,除此之外的其他情况下,则应使用指针。
5,const_cast:用于类型转化掉表达式的const或volatileness属性。去除const属性。
    dynamic_cast:用于安全的沿着类的继承关系向下进行类型转换:其把指向基类的指针或引用转化成指向其派生类或其兄弟类的指针或引用。(指针转换失败返回空指针,引用转化失败抛出异常),
    但其不能用于缺乏虚函数的类型上也不能用它来转换掉constness;
6,reintepret_casts:最普通的用途就是在函数指针类型之间转换。
7,类继承的最重要的特性是可以通过基类指针或引用操作派生类,这样的指针或引用具有行为的多态性,但不能对数组使用多态。
8,避免无用的缺省构造函数(没有参数的构造函数):
9,c++编译器能够在两种数据类型之间进行隐士转换。有两种函数允许编译器进行隐士类型转换:单参数构造函数,隐士类型转换运算符。
10,构造函数用explicit声明,编译器会拒绝了隐士类型转换而调用构造函数.c++编译器会把》作为一个符号来解释,在两个>间没有空格,语句会产生语法错误。除非确实需要,不要定义类型转换函数。
11,++前缀和后缀:前缀返回一个引用,后缀返回的一个const类型;当指针为空时strlen不会被调用很重要。
12,new和operator new的区别:前者是先构造函数初始化后分配 内存,后者是只分配内存返回一个指向内存的指针。delete和operator delete同理。
13,使用析构函数和构造函数防止资源泄漏。禁止异常信息传递到析构函数外:在析构函数调用释放函数外加上try catch
14,虚拟构造函数能返回一个指针,指向调用该函数的对象的新拷贝,只是调用它们真正的拷贝构造函数。
15,让构造函数成为public,析构函数为private可防止直接delete,可以用一个成员函数调用delete,
16,用模板类实现二维数组的传参问题
17,为了维护那些必须同时供C++和C使用的头文件工作,当用C++编译时,应该加extern “C”{}看做是申明在这个函数应该被当做好像c写的一样而进行调用,但用C编译时,不应该这样。
通过只在C++编译器定义的宏_cplusplus 可以将头文件组织成: #ifdefine _cplusplus extern “C”{ #endif 。。。 #ifdefine _cplusplus } #endif

作者 : Scott Meyers 译序、导读 : 侯捷 译序(侯捷) C++ 是一个难学易用的语言! C++ 的难学,不仅在其广博的语法,以及语法背後的语意,以及语意背後的深层思维,以及深层思维背後的物件模型;C++ 的难学,还在於它提供了四种不同(但相辅相成)的程式设计思维模式:procedural-based,object-based,object-oriented,generic paradigm。 世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。 在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++ 相关书籍之多,车载斗量;如天上繁星,如过江之鲫。广博如四库全书者有之(The C++ Programming Language、C++ Primer),深奥如重山复水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),细说历史者有之(The Design and Evolution of C++, Ruminations on C++),独沽一味者有之(Polymorphism in C++, Genericity in C++),独树一帜者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式库大全有之(The C++ Standard Library),另辟蹊径者有之(Generic Programming and the STL),工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++)。 这其中,「工程经验之累积」对已具C++ 相当基础的程式员而言,有著致命的吸引力与立竿见影的帮助。Scott Meyers 的Effective C++ 和More Effective C++ 是此类佼佼,Herb Sutter 的Exceptional C++ 则是後起之秀。 这类书籍的一个共通特色是轻薄短小,并且高密度地纳入作者浸淫於C++/OOP 领域多年而广泛的经验。它们不但开展读者的视野,也为读者提供各种C++/OOP 常见问题或易犯错误的解决模型。某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳的解法、以及其他可能的牵扯。至於大范围主题,例如smart pointers, reference counting, proxy classes,double dispatching, 基本上已属design patterns 的层级! 这些都是经验的累积和心血的结晶。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值