C++核心准则
共 3075字,需浏览 7分钟
·
2020-02-13 23:23
介绍
接口
I.26 如果想要不同编译器都能适用的ABI,使用C风格规则子集
函数
F.7 对于通常的使用场景,应该使用T*或T&参数而非智能指针。
F.16 对于输入参数来说,拷贝代价小的传值,其他传递const参照
F.18 使用X&&传递“将会发生数据移动”的参数并实施数据移动
F.19 对于只传递不处理的参数,使用模板类型TP&&并在传递时使用std::forward
F.21 如果需要返回多个输出值,最好返回结构体或者tuple
F.25 使用zstring或not_null
F.48 不要返回使用std:move从局部变量获得的右值引用
类和继承
C.6:不要在一条语句内声明类或枚举值的同时又定义该类型的变量
C.8:存在非公有成员时,使用class而不是struct定义类
具体类型
构造/析构和复制
C.35:基类的析构函数要么是公开的虚函数,要么是保护的非虚函数
C.48:如果构造函数需要用常数初始化成员,使用类内初始化器更合适
C.60: 拷贝赋值运算符应该是以const&为参数,返回非常量引用类型的非虚函数
C.63:保证移动赋值运算符为非虚函数,参数类型为右值引用,返回值为常量引用类型
C.64:移动操作在完成移动之后,移动源对象应该保持有效状态
C.81:如果不需要默认(同时不需要其他选项)行为,使用=delete禁止它们C.82:不要在构造函数或析构函数中调用虚函数
C.90:依靠构造函数和赋值运算符,而不是内存初始化和内存拷贝
容器和资源管理
类继承(面向对象)
C.128:虚函数应该明确定义为virtual,overide或者final
C.130:实现多态类的深拷贝时,虚clone函数要比拷贝构造函数/赋值运算符好
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】轻松学习每一天!
面向对象开发,面向对象思考!