![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective c++
qq_910076521
这个作者很懒,什么都没留下…
展开
-
条款3:尽可能的使用const
关于const修饰变量在条款2上说了,这就不再提及1 容器迭代器的问题 ,const 在前面和 const_interator的区别const std::vector<int>::iterator iter = ...//声明迭代器为const就像声明指针为const一样(即T* const 指针)*iter=10//正确++iter//错误std::vector&...原创 2019-03-29 19:12:21 · 122 阅读 · 0 评论 -
条款7:为多态基类 声明virtual析构函数
1 c++明确指出,当派生类对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未有定义---实际执行时通常发生得是子类对象得derived成分没有被销毁,消除这个问题得做法很简单,给base类一个虚拟构函数,此后删除派生类对象就会如你想要得那般,是的,他会消除整个对象,包括派生类成分class TimeKeeper{publ...原创 2019-04-04 00:05:42 · 147 阅读 · 0 评论 -
条款04:确认对象被使用前以先被初始化
1 永远再使用对象的之前堆它初始化对于无任何成员的内置类型,你必须收工完成此事:int x=0;const char *test="hello,world";double d;std::cin>>d; //以读取input stream的方式完成初始化对于内置类型意外的任何其他东西,初始化责任落到构造函数身上,规则很简单:确保每一个构造函数都将对象的每一个成员初始化...原创 2019-03-30 22:55:21 · 99 阅读 · 0 评论 -
条款5:了解C++默默编写并调用哪些函数
1什么时候empty class 不再是个empty class 呢?当C++处理过它之后.如果自己没有声明,编译器就会为它声明一个copy构造函数,一个copy assignment操作符和一个析构函数.此外如果没有声明任何构造函数,编译器也会声明一个default 构造函数.所有这些函数都是 public 且 inlineclass Empty {};就好像写下这样的代码...原创 2019-03-31 12:41:00 · 125 阅读 · 0 评论 -
条款02:尽量以const,enum,inline替换#define
#define ASPECT_RATION 1.653书中说 #define或许不被视为语言的一部分ASPECT_RATION可能从未被语言看到,这个记号可能未被进入记号表,并且调试的时候错误信息也是1.653,而不是 ASPECT_RATION,如果 ASPECT_RATION被定义在一个非你所写的头文件的话,你肯定对1.653来自哪里,于是你将因为一个非你所写的头文件而浪...原创 2019-03-27 11:35:08 · 135 阅读 · 0 评论 -
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
1 如果你不想要copyt构造函数或者copy assignment操作得话,即使你不声明,编译器可能会给你自动产出一份,如果你声明它,你的class还是会支持copying,但这里的目标确实阻止copying,答案的关键是:所有的编译器产出的函数都是private,为阻止这些函数被创建出来,你必须自行声明他们,但这里并没有什么需求说你必须将他们声明为public,所以你可以将其声明为privat...原创 2019-04-01 23:18:32 · 115 阅读 · 0 评论