文档章节

Effective C++目录中的C++编程条款

zray4u
 zray4u
发布于 2016/11/16 20:40
字数 1648
阅读 13
收藏 0

目录

译序(侯捷) v
目录(Contents) vii
前言(Preface) xiii
致谢(Acknowledgments. 中文版略) xvii
导读(Introduction) 001
改变旧有的C习惯(Shifting from C to C++) 013
条款1:尽量以 const 和enum, inline 取代 #define 013
Prefer const,enum and inline to #define.
条款2:尽可能使用const
Use const whenever possible

如果想实现三个数连乘呢?c++11里的右值引用是否能帮到什么忙?

No!并不需要任何变动,因为返回值是const并不会影响连乘!!!因为乘法本身要求的参数就是const,而且一般乘法中不应该对被乘数和乘数有任何修改,除非是*=。


条款3:尽量以 new 和 delete 取代 malloc() 和 free() 019
Prefer new and delete to malloc and free.
条款4:尽量使用 C++ 风格的注释形式 021
Prefer C++-style comments.

内存管理(Memory Management) 022
条款5:使用相同形式的 new 和 delete 023
Use the same form in corresponding uses of new and delete.
条款6:记得在 destructor 中以delete 对付 pointer members 024
Use delete on pointer members in destructors.
条款7:为内存不足的状况预做准备 025
Be prepared for out-of-memory conditions.
条款8:撰写 operator new 和 operator delete 时应遵行公约 033
Adhere to convention when writing operator new and operator delete.
条款9:避免遮掩了 new 的正规形式 037
Avoid hiding the "normal" form of new.
条款10:如果你写了一个operator new,
请对应也写一个operator delete 039
Write operator delete if you write operator new.

构造函数、析构函数和Assignment 运算符 049
Constructors, Destructors, and Assignment Operators
条款11:如果classes内动态配置有内存,请为此 class 声明
一个 copy constructor 和一个 assignment 运算符 049
Declare a copy constructor and an assignment operator
for classes with dynamically allocated memory.
条款12:在 constructor 中尽量以 initialization 取代 assignment 052
Prefer initialization to assignment in constructors.
条款13:Initialization list 中的 members 初始化排列次序应该 
和其在 class 内的声明次序相同
057
List members in an initialization list in the order
in which they are declared.
条款14:总是让 base class 拥有 virtual destructor 059
Make sure base classes have virtual destructors.
条款15:令 operator= 传回"*this 的 reference" 064

这是赋值操作符。

Have operator= return a reference to *this.

对于操作符重载一个原则:要与基本类型在使用时的语义相同。包括但不限于允许执行的操作。操作返回值的类型。是否支持链式操作。

条款16:在 operator= 中为所有的 data members 赋予内容 068
Assign to all data members in operator=.
条款17:在 operator= 中检查是否"自己赋值给自己" 071
Check for assignment to self in operator=.

类与函数之设计和声明 077
Classes and Functions: Design and Declaration
条款18:努力让接口完满且最小化 079
Strive for class interfaces that are complete and minimal.
条款19:区分member functions, non-member functions和 
friend functions三者 084
Differentiate among member functions, non-member functions,
and friend functions.

若所有参数皆需类型转换,请为此采用non-member函数,并尽量避免friend函数。


条款20:避免将 data members 放在公开接口中 089
Avoid data members in the public interface.
条款21:尽可能使用 const 091
Use const whenever possible.

条款22:尽量使用 pass-by-reference(传址), 
少用 pass-by-value(传值) 098

Prefer pass-by-reference to pass-by-value.
条款23:当你必须传回object 时,不要尝试传回 reference 101
Don’t try to return a reference when you must return an object.

Ans:这是什么意思?有没有什么例子?  主要讲返回局部对象的引用或指向局部对象的指针的问题。

如果是返回一个动态创建的对象的引用呢?

感觉这个问题还真的是很复杂???
条款24:在函数重载(function overloading)和
参数缺省化(parameter defaulting)之间,谨慎抉择 106
Choose carefully between function overloading
and parameter defaulting.
条款25:避免对指针型别和数值型别进行重载 109
Avoid overloading on a pointer and a numerical type.
条款26:防卫潜伏的 ambiguity(模棱两可)状态 113
Guard against potential ambiguity.
条款27:如果不想使用编译器暗自产生的 member functions, 
就应该明白拒绝它 116
Explicitly disallow use of implicitly generated member functions
you don’t want.
条款28:尝试切割 global namespace(全域命名空间) 117
Partition the global namespace.

类与函数之实现 123
Classes and Functions: Implementation
条款29:避免传回内部数据的 handles 123
Avoid returning "handles" to internal data.
条款30:避免写出member function,传回一个 non-const pointer 或
reference 并以之指向较低存取层级的 members 129
Avoid member functions that return non-const pointers or
references to members less accessible than themselves.
条款31:千万不要传回"函数内 local 对象的 reference", 
或是"函数内以 new 获得的指针所指的对象" 131
Never return a reference to a local object or to
a dereferenced pointer initialized by new within the function.
条款32:尽可能延缓变量定义式的出现 135
Postpone variable definitions as long as possible.
条款33:明智地运用 inlining 137
Use inlining judiciously.
条款34:将文件之间的编译依赖关系(compilation dependencies)
降至最低 143
Minimize compilation dependencies between files.

继承机制与面向对象设计 153
Inheritance and Object-Oriented Design
条款35:确定你的 public inheritance 模塑出 "isa" 的关系 154
Make sure public inheritance models "isa."
条款36:区分"接口继承(interface inheritance)"和
"实现继承(implementation inheritance)" 161
Differentiate between inheritance of interface and
inheritance of implementation.
条款37:绝对不要重新定义一个继承而来的非虚拟函数 169
Never redefine an inherited nonvirtual function.
条款38:绝对不要重新定义一个继承而来的缺省参数值 171
Never redefine an inherited default parameter value.
条款39:避免在继承体系中做 cast down(向下转型)的动作 173
Avoid casts down the inheritance hierarchy.
条款40:通过 layering(分层技术)来模塑 has-a 或
is-implemented-in-terms-of 的关系 182
Model "has-a" or "is-implemented-in-terms-of" through layering.
条款41:区分 inheritance 和 templates 185
Differentiate between inheritance and templates.
条款42:明智地运用 private inheritance(私有继承) 189
Use private inheritance judiciously.
条款43:明智地运用多继承(multiple inheritance,MI) 194
Use multiple inheritance judiciously.
条款44:说出你的意思并了解你所说的每一句话 210
Say what you mean; understand what you’re saying.杂项讨论(Miscellany) 212
条款45:知道 C++(编译器)默默为我们完成和调用哪些函数 212
Know what functions C++ silently writes and calls.
条款46:宁愿编译和连接时出错,也不要执行时才错 216
Prefer compile-time and link-time errors to runtime errors. 219
Ensure that non-local static objects are initialized
before they’re used.
条款48:不要对编译器的警告讯息视而不见 223
Pay attention to compiler warnings.
条款49:尽量让自己熟悉 C++ 标准程序库 224
Familiarize yourself with the standard library.
条款50:加强自己对 C++ 的了解 232
Improve your understanding of C++.

© 著作权归作者所有

zray4u
粉丝 0
博文 217
码字总数 188982
作品 0
西城
私信 提问
C++ 书籍大汇

C++ 书籍大汇 C++ 书籍大汇 语言基础入门: 1. C++ Primer 《C++入门》(通常不用中文名) by Stanley B. Lippman 有第三版和第四版,如其名,是C++入门的不二选择,是全面广泛的参考书目,内...

长平狐
2012/09/20
298
0
Effective C++ 笔记(1):视C++为语言联邦

条款一(clause 1) 将C++视为语言联邦:提出了一种将C++分为四种不同次语言的观念,四种次语言分别是: 1、C语言,面向过程的语言,C++完全向下兼容C,在C++中单纯使用C语言的语法除了遵守的一...

oldpan
2017/09/10
0
0
C++各阶段学习书目

1. 入门 Lippman的《Essential C++》 顾名思义,这本书是很短小精悍的。通过这本书,可以对C++的最常用和重要的特性有全面的了解,并对C++的全貌有一个概念。虽然这远远不够,但就是这样的书...

晨曦之光
2012/04/24
509
1
学习C++的50条,谨以送给C++的粉丝们

1.把C++当成一门新的语言学习(和C没啥关系!真的);   2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差);   3.看《The C++ Programming Language》(这...

地瓜儿
2013/01/11
1K
7
C#转C++的一点分享

从C#转C++有段时间了,一直想分享点什么,但又不太好意思分享,毕竟自己做C++的时间不太长,最近感觉自己已能胜任现有工作,想分享的想法又强了点,前几天看到这样一篇博客《那些年·我们读过的专业...

爱情经纬线
2014/01/17
4.1K
11

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题

关注我,可以获取最新知识、经典面试题以及微服务技术分享   MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用...

ccww_
30分钟前
3
0
SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache、RedisCache、ConcurrentMapCache等。 这一节我们来看看Spring Cache使用RedisCache。...

杨小格子
39分钟前
3
0
OpenJDK之CountDownLatch

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CountDownLatch是Doug Lea在JDK1.5中引入的,作用就不详细描述了, await()方法,如果还有线程在执行,那么当前线程...

克虏伯
45分钟前
4
0
简单编程

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include<stdio.h>int main(){char name[3];char family[3];printf("Please input your name and family:\n...

电子工程197沈志初
49分钟前
4
0
详解Mysql分布式事务XA(跨数据库事务)

在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上)。在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可...

slagga
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部