
effective c++学习笔记
文章平均质量分 87
peakyblinder
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
导读
函数签名式(signature): 函数签名式即为函数的参数和返回类型std::size_t numDigits(int number) 函数numDigits的签名式为std::size_t (int),即为函数获得一个int并返回一个std::size_t定义式(definition):提供编译器一些声明所遗漏的细节 对对象而言,是为对象分拨内存的地点,对funct...原创 2018-04-11 10:34:33 · 111 阅读 · 0 评论 -
条款1-3
条款01:视C++为一个语言联邦将C++视为由四个次语言组成的联邦,每一个次语言都有自己的守则,跨越语言时,需要改变规则:C:C++以C为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(build_in data types)、指针(pointer)等统统来自CObject-Oriented C++:这部分也是C with Classe...原创 2018-04-11 11:21:09 · 181 阅读 · 0 评论 -
条款20-26
条款20:宁以pass_by_reference替换pass_by_value 缺省情况下C++以by value方式传递对象至函数,这可能使得pass_by_value成为费时的操作。而pass_by_reference可以避免构造和析构操作,并且by reference方式传递参数可以避免slicing(对象切割)问题。当一个derived class对象以by value方式传...原创 2018-04-18 17:05:53 · 204 阅读 · 0 评论 -
条款4-10
条款04:确定对象使用前已被初始化 对象成员变量的初始化发生在进入函数构造本体之前,在函数体内成员变量不是被初始化而是被赋值class A{ public: A(const string &); private: string s; }; A::A(const string &para) { s=para; //这些是赋值而不是初始化 }...原创 2018-04-12 22:52:08 · 216 阅读 · 0 评论 -
条款11-17
条款11:在operator=中处理“自我赋值” 如果一段代码操作pointers或者references而它们被用来指向多个相同类型的对象,就需要考虑这些对象是否为同一个。实际上,只要来自同一继承体系,它们甚至不需要声明为相同类型就可以造成别名(如C++的多态性,base class的指针或者引用可以指向derived class)。class BitMap{}; class Wi...原创 2018-04-13 22:06:34 · 209 阅读 · 0 评论 -
条款32-40
条款32:确定你的public继承塑模出is-a关系 public inheritance意味“is-a”(是一种)的关系。如果令class D以public继承class B,即每一个类型为D的对象同时也是一个类型为B的对象,反之不成立。B比D表现出更一般化的概念,而D比B表现出更特殊化的概念。B可以派上用场的地方,D对象一样可以派上用场,因为每一个D对象都是一个(是一种)B对象。...原创 2018-04-25 16:04:02 · 266 阅读 · 0 评论 -
条款27-31
条款27:尽量少做转型动作class window{ public: virtual void onResize(){...}; ... }; class specialWindow:public window{ public: virtual void onResize() { static_cast<window>(*this).onResize(); } }; 上述...原创 2018-04-20 19:12:09 · 209 阅读 · 0 评论 -
条款41-48
条款41:了解隐式接口和编译期多态 面向对象编程总是以显示接口和运行期多态解决问题。template及泛型编程的世界,与面向对象有根本不同,虽然显示接口和运行期多态仍然存在,但重要性降低,而隐式接口和编译期多态更为重要。 运行期多态和编译期多态类似于“哪一个重载函数被调用”(编译期)和“哪一个virtual函数该被绑定”(运行期)的差异类似。 显示接口由函...原创 2018-05-26 18:49:00 · 309 阅读 · 1 评论 -
条款49-52
条款49:了解new_handler的行为 operator new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个用户指定的错误处理函数,一个所谓的new_handler。为了指定这个函数,客户必须调用set_new_handler:namespace std{ typedef void (*new_handler)(); new_handler set_new_handl...原创 2018-05-28 19:43:02 · 267 阅读 · 0 评论