![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective c++ 笔记
chenhd925
Never give up, never give in, never say never!
展开
-
尽量用const 和inline 而不用#define
在编程过程中尽量使用const和inline代替#define,也就是说尽量使用在编译期间进行处理的关键字而不是使用在预处理阶段进行处理的关键字。#define所定义的量不会被添加到符号表中,而是在预处理阶段用其定义的内容进行直接替换,这样就会产生一疑惑。例如,#define ASPECT_RATIO 1.653如果在编译时报出一个错误,这个错误源自1.653,这时我们将无法定位程序的哪部原创 2009-12-13 10:24:00 · 345 阅读 · 0 评论 -
尽量iostream用而不用stdio.h
中的scanf,printf之类的函数不是类型安全的,也不具扩展性,他们要求将读写变量和格式分开。库所提供的类和函数克服了以上缺陷。注意是 not 。以上内容总结自《Effective c++》Item 2原创 2009-12-13 10:43:00 · 374 阅读 · 0 评论 -
拷贝构造函数与重载operator =
如果一个类既没生命拷贝构造函数也没声明赋值操作符,结果将变得十分可怕,通常会产生很多不良后果。看下面例子: class String {public:String(const char *value);~String();... // 没有拷贝构造函数和operator=private:char *data;}; Strin翻译 2009-12-17 19:42:00 · 426 阅读 · 0 评论 -
类成员的初始化顺序
编程时尽量将成员的初始化放到初始化列表中,而不是构造函数体中,为什么要采取这样的策略呢,一方面,一些const只能被初始化而不能被赋值,另一方面,在初始化列表中初始化成员比在构造函数体中通过赋值初始化成员效率要高。因为,对象的初始化,首先进行的数据成员的初始化,然后才会执行构造函数体内的动作,对于有基类的对象来说,基类成员的初始化和构造函数体发生在派生类成员初始化和构造函数体之前。因此,如果在初翻译 2009-12-17 20:38:00 · 345 阅读 · 0 评论 -
重写operator new 和 operator delete
作为一名程序员,一定要特别注意申请内存失败的情况。通常operator new分配失败后会抛出一个std::bad_alloc异常。bad_alloc是分配内存失败时候抛出的异常的一种类型,这个异常类型位于std namespace中。 C采用的方法是,定义一个与类型无关的宏来分配内存并检查是否成功。C++允许我们在每个内中对全局operator new/delete进行重载,并指定我们自己原创 2009-12-15 10:47:00 · 477 阅读 · 0 评论