批注《Effective C++》

本文分享了C++编程中的优化技巧,如使用const、enum、inline替换预处理器宏,以及在STL中的const_iterator应用,强调封装性和确定对象初始化的重要性,提倡使用Template和inline函数以提高效率和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一点拙见

第一章:让自己习惯C++

条款01:视c++为一个语言联邦

四大次语言:COOCTemplateSTL

 

 

条款02:尽量以const,enum,inline 替换 #defeine

1.宏报错时,只报数值,不报变量名

2.作用域广,无封装性

3.类中的常量可声明static,记得在类外(实现文件)重定义,别忘了const

4.有的编译器不允许数组长度为static,可用enum hack实现

enum{a = 5};
int arr[a];

  像#define一样无法获得地址(有时可能不需要)

5.形似函数的宏,虽然无函数调用的额外开销,但用Templateinline代替兼顾效率和安全

#define F(a,b) f((a) > (b) ? (a) :(b)) 
//写成下面
Template<typename T>
inline void F(const T& a, const T&b)
{
  f((a) > (b) ? (a) :(b)) ;
}

 

 

条款03:尽可能使用const

1.STL中的const_iterator 指向可变,数值不可变

2.用const做函数返回值可避免if(返回值 = 变量)的错误

3.const成员函数:(1)接口清晰,哪个函数可改对象哪个不可很清晰

                             (2)可操作const对象

4.形参是否加const可重载

5.const成员函数若返回指向该对象的非const被指针接受,那么const属性会被破坏

6.常量性转除:constnon-const函数作用差不多时(一个函数完全可以实现),为减少重复代码,可把non-const对象转成const对象,并调用const成员函数,最后移除const限制,反之不安全

int a = 0;
static_cast(a).F();    //转成const 调用const成员函数
const_cast(a);         //转回non-const

 

 

条款04:确定对象被使用前已先被初始化

1.永远在使用对象之前将其初始化

2.用成员初值列改写构造函数

3.总是在初值列中列出所有成员变量

 

第二章:构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数

1.default析构是non-virtual,除非基类声明有virtual析构

2.C++不允许让reference改指向不同对象,这在拷贝构造时要尤为注意,编译器也不会为此生成default构造,const也一样,base classcopy assignment操作符声明为private,编译器拒绝为其derived class生成一个copy assignment操作符

 

 

条款06:若不想使用编译器自动生成的函数,就该明确拒绝

1.不想拷贝,又怕编译器默认拷贝被使用,可声明一个private的拷贝而不实现,但有memberfriend函数调用风险

2.或声明一个基类,将拷贝声明为private,并继承,这样即使memberfriend函数调用,其基类会阻值这一行为

 

 

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

1.没有virtual析构,当derived class对象经由一个base class指针被删除,base部分被删除,而derived部分没被删除

2.不作为base class就不要声明virtual析构,只有当class内含至少一个virtual函数,才为它声明virtual析构

3.不要试图继承一个标准容器或其他带有non-virtual析构的class,比如string类型(non-virtual析构)

4.pure virtual析构需要一份定义

 

 

条款08:别让异常逃离析构函数

1.终究是设计模式的问题

 

 

条款09:绝不在构造和析构过程中调用virtual函数

1.在base class 构造期间,virtual 函数不是 virtual 函数。

 

 

 

打字好累,不想更了。。。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值