![](https://img-blog.csdnimg.cn/358e3a792da648b380781a05c54a23b0.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Effective C++学习笔记
文章平均质量分 71
记录在学习Effective C++中对内容的理解和总结
就要 宅在家
New git new get
展开
-
C++ Primer笔记——tuple类型
定义一个tuple对象时,可以使用默认的构造函数,它会为每个成员进行默认初始化。当然也可以手动初始化。//使用默认构造进行初始化//自定义直接初始化//错误,并非直接初始化值得注意的是,《C++ Primer》说“tuple的构造函数是explicit,因此必须使用直接初始化”,因此tp3应该编译失败。但是在VS2019环境实测中,编译是正常通过的,应该是VS对tuple类型进行了优化,支持了隐式类型转换。类似make_pair函数,标准库定义了make_tuple函数。原创 2023-08-24 09:00:13 · 495 阅读 · 2 评论 -
《Effective C++》学习笔记——区分接口继承和实现继承
当然,这种方法也不是万全之策,因为它要求defaultFly函数应该是非虚(non-virtual)函数,任何一个派生类都不应该重定义它。但此时如果需要新上线一款飞机,它与前两种的不同就在于飞行方式,又因为时间原因急于上架而忘记了对fly函数重定义,那灾难就发生了。实现基类函数时,我们需要考虑基类该函数与派生类该函数关系后,再给予具体的实现方式。我们先定义一个基类飞机,它会实现一个飞行方法,因为所有的飞机都能飞。,这样当派生类定义时,可以直接调用基类函数,也就是缺省实现继承。原创 2022-11-06 15:45:00 · 156 阅读 · 5 评论 -
Effective C++学习笔记——宁以传引用替换传值
那么在函数内部,Print()就是按照Human中的定义进行调用。比如一个由int组成的对象,某些编译器并不会把它放入缓存器中。一个小小的传值,竟然会引发这么多次的构造析构,着实令人惊讶,不可忽视。这种情况下,就应该使用引用传参,因为指针是会放入缓存器中的。我们的预期是它会打印 "I am Man",但实际上不是。同时定义一个函数打印对象信息(传值传参),并调用。,毕竟当我们传值传参时一般不希望实参发生改变。因此,我们同样需要进行引用传参。这是因为,当我们传值的时候,,这并不是我们希望的。原创 2022-10-07 09:00:00 · 807 阅读 · 4 评论 -
Effective C++学习笔记——确定对象被使用前已先被初始化
不同编译单元(源文件)内的对象如果其中一方要使用另一方,那么一定要注意初始化的次序,倘如被借用的一方尚未初始化,那么会发生意想不到的错误。小编将《Effective C++》中代码示例做了调整,以便讲解展示:下面有两个类Par、Child分别位于不同的编译单元内。我们所期待的结果是当Child对象B定义时,调用自己构造函数打印Par对象A中的Hello world。//头文件class Par{public:Par(){}};//源文件Par A。原创 2022-10-04 08:00:00 · 1172 阅读 · 7 评论