编程语言
首页 > 编程语言> > Effective C++ 阅读笔记之Chapter5

Effective C++ 阅读笔记之Chapter5

作者:互联网

前言

大家好,我是雨墨,我深知好记性不如烂笔头的道理,所以在阅读的时候都尽量写读书笔记,方便日后复习,当然笔记并不能代替书籍上的内容。希望我的笔记也能帮助到大家,如果我的笔记有什么问题,欢迎大家给小老弟纠错~

条款二十六总结

延后变量的定义,且最好在定义的时候给它初始值实参,否则你应该尽可能延后定义。

string encryptPassword(const string& password) {
    ...
    string encrypted(password);		// 这样做就很棒!
    
    ...
    return encrypted;
}

如果遇到循环:如果变量是 class 对象的时候,你必须要考虑定义在循环外和定义在循环内哪一种成本更高,包含构造成本、析构成本、赋值成本。然后选择成本较低的那一种。

// 方法 A
Widget w;
for (int i = 0; i < n; ++i) {
    w = 取决于 i 的某个值;
    ...
}

// 方法 B
for (int i = 0; i < n; ++i) {
    Wiget w(取决于 i 的某个值);
    ...
}

除非你知道赋值成本比 “构造+析构” 低,或是你正在处理高度敏感的部分,否则应当使用方法 B。我的理解是:方法 B 延迟了 w 的定义,且在定义的时候给了 w 初始值。

条款二十七总结

书上 p117 - p122 的例子不错,复习时可以再看看。

条款二十八总结

class GUIObject { ... };
const Rectangle
bounding_box (const GUIObject& ob);

// user action
const Point* p_upper_left = &(bounding_box(*pgo).upper_left());

上述代码可能造成 dangling handles :

最后一条语句结束之后,bounding_box() 的返回值由于是临时对象,生命周期已经到了,被销毁,然后留下孤零零的 p_upper_left 指向一个不存在的对象,造成 p_upper_left 空悬。

条款二十九总结

这一章节涉及的知识不是那么容易搞明白,遇到问题多翻阅,配合 C++ Primer 的异常处理进行阅读。

条款三十总结

作为开发人员应该牢记上述的建议,不要热衷使用 inline ,而应该寻找程序中 20% 的地方使用 inline 为其瘦身。

条款三十一总结

将文件之间的编译依存关系降至最低,这样能保证你不会出现修改一下某个成分就出现重新编译和连接的结果。

How?

基于此思想的两种做法是

具体是如何实现的书上有明确的讲述,多看多思考。

**这里仍然存在疑问:这两种方式是如何降低编译依存关系的?**希望有一天能回来解答上!

参考书籍:
《Effective C++》

标签:...,const,定义,Effective,Chapter5,C++,inline,class,函数
来源: https://blog.csdn.net/qq_51387669/article/details/121000514