Effective C++学习笔记备忘

提示:本文是一篇个人读书笔记,并不是对原书内容的系统总结整理,可能对作者以外的读者没有太大的参考意义。

  目前对C++的了解还处于入门阶段,这本书真正看懂的内容大概只有一半左右。大部分条款和机制先建立一个印象,希望能在未来实际使用中再来回顾和加深理解。

条款02:

不允许在class内对static const类型变量赋值?替代方案是使用enum{NumTurns = 5};   (P14)

 

条款03:

1.const与指针(P17~18)

char greeting[]="Hello";
const char* p = greeting;//non-const pointer, const data
char* const p = greeting;//const pointer, non-const data
const char* const p =greeting; //const pointer, const data

决定哪个是常量与*和const二者位置相关。const *表示被指物是常量,* const表示指针自身是常量。常量Widget对象,下面两种意义相同:

void f1(const Widget* pw);
void f2(Widget const * pw);

2.const_cast和static_cast转型(P24)

 

条款04:

  member initalize list比构造函数为成员变量赋值效率通常更高,后者相当于调用了default构造函数为它们设初值,然后再赋予新值。(P28)

 

条款07:为多态基类声明virtual析构函数

  正如题名,这么做是为了经由base class指针删除derived class对象时把derived部分也一并销毁。(P41)

  把不带virtual析构函数的类作为基类是不明智的,比如string/vector/list/set/tr1::unordered_map等等。

 

条款11:在operator=中处理“自我赋值”

  方法一:判断两个操作数是否相同,比较耗费资源;

  方法二:swap()创建rhs的副本,并与this交换。

 

条款20:

  传递const引用可以避免传value引起的派生类被“切割”(slicing),不仅仅是高效。(P89)

 

条款27:

  使用容器存储直接指向derived class对象的指针(通常是智能指针)避免dynamic_cast。

 

条款30:

  inline函数如果改变,那么所用到的所有文件都需要重新编译;反之,non-inline函数改变时只需重新连接就好,比前者负担小得多。

 

条款43:

  template特化版:template<>语法,使得在参数为某一个时模板全特化。

posted @   五岳  阅读(499)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
回到顶部
点击右上角即可分享
微信分享提示