《Effective C++》第三版-0. 导读(Introduction)
术语(Terminology)
声明式(declaration):告诉编译器某个东西的名称和类型(type),但略去细节
extern int x; //对象(object)声明式
std::size_t numDigits(int number); //函数(function)声明式
class Widget; //类(class)声明式
template<typename T>; //模板(template),“typename”的使用见条款42
class GraphNode;
签名式(signature):每个函数的声明式揭示其签名式,即其参数和返回类型
//函数numDigits的签名是std:size_t (int),即获得一个int并返回一个std:size_t
std:size_t numDigits(int number);
定义式(definition):提供变编译器一些声明式所遗漏的细节
int x; //对象的定义式
std::size_t numDigits(int number) //函数的定义式
{
std::size_t digitsSoFar = 1;
while ((number /= 10) != 0) ++digitsSoFar;
return digitsSoFar; //此函数返回其参数的数字个数
}
class Widget { //class的定义式
public:
Widget();
~Widget();
...
};
template<typename T> //template的定义式
class GraphNode {
public:
GraphNode();
~GraphNode();
...
};
初始化(Initialization):赋予对象初值的过程
default构造函数是一个可被调用而不带实参的函数,其要不没有参数,要不每个参数都有缺省值
class A {
public:
A(); //default构造函数
};
class B {
public:
explicit B(int x = 0, bool b = true); //default构造函数
};
class C {
public:
explicit C(int x); //不是default构造函数,因其参数没有缺省值
};
//explicit构造函数可阻止它们被用来执行隐式类型转换(implicit type conversions)
//但它们仍可被用来执行显示类型转换(explicit type conversions)
void doSomething(B bObject); //函数,接受一个类型为B的对象
B bObj1; //一个类型为B的对象
doSomething(bObj1); //正确,传递一个B给doSomething函数
B bObj2(28); //正确,根据int 28建立B
doSomething(28); //错误!int不能被隐式转换为B
doSomethin(B(28)); //正确,使用B构造函数将int显示转换
- copy构造函数用来以同型对象初始化自我对象
- copy assignment操作符用来从另一个同型对象中拷贝其值到自我对象
class Widget {
public:
Widget(); //default构造函数
WIfget(const WIdget& rhs); //copy构造函数
Widget& operator=(const Widget& rhs); //copy assignment操作符
...
};
Widget w1; //调用default构造函数
Widget w2(w1); //调用copy构造函数
w1 = w2; //调用copy assignment操作符,赋值而非非初始化
//"="语法也可用来调用copy构造函数
Widget w3 = w2; //调用copy构造函数,初始化而非赋值
copy构造函数定义一个对象如何passed by value
bool hasAcceptableQuality(WIdget w);
...
Widget aWidget;
if (hasAcceptableQuality(aWidget)) ...
//参数w以by value的方式传递给hasAcceptableQuality
//在上述调用中aWidget被复制到w体内,该动作由copy构造函数完成
命名习惯(Naming Conventions)
| 名称 | 含义 |
|---|---|
| lhs | left-hand side(左手端) |
| rhs | right-hand side(右手端) |
| pt | pointer to T(指向一个T型对象的指针) |
| rt | reference to T |
| mf | 成员函数 |
关于线程(Threading Consideration)
会在C++构件在多线程环境中有可能引发问题时指出,对多线程不熟悉或没需求可忽略相关讨论
TR1和Boost
- TR1(Technical Report 1)是一份规范,描述加入C++标准程序库的新机能
- Boot是个组织,也是个网站(https://www.boost.org/),提供可移植、同僚复审、源码开放的C++程序库
《Effective C++》第三版-0. 导读(Introduction)的更多相关文章
- 《Effective Java 第三版》新条目介绍
版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...
- C++学习书籍推荐《Effective C++ 第三版》下载
百度云及其他网盘下载地址:点我 编辑推荐 <Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)>前两个版本抓住了全世界无数程序员的目光.原因十分明显:S ...
- Effective Java第三版(一) ——用静态工厂代替构造器
此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<E ...
- effective java(第三版)---读书笔记
第一章 引言 < Effective Java>这本书并不厚,而且并不适合初学者,适合有一定的工作经验的java攻城狮.这本书不是百科全书式的JAVA 手册,而是试图在讲述如何正确.高效地 ...
- 《Effective Java 第三版》目录汇总
经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习.时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正. 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用静态工厂方法替 ...
- Effective Java 第三版——7. 消除过期的对象引用
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——9. 使用try-with-resources语句替代try-finally语句
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——10. 重写equals方法时遵守通用约定
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——11. 重写equals方法时同时也要重写hashcode方法
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——14.考虑实现Comparable接口
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
随机推荐
- drools中使用function
一.背景 当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢?那么在drools中如何自定义function? 二.需 ...
- KingbaseES V8R6集群运维案例之---访问系统表unrecognized token- false故障
KingbaseES V8R6集群运维案例之---访问系统表'unrecognized token: "false"'故障 案例说明: KingbaseES V8R6集群在升级补丁 ...
- C++设计模式 - 模板方法(Template Method)
组件协作模式: 现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用 ...
- OpenHarmony Meetup北京站招募令
OpenHarmony Meetup城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交 ...
- C 语言函数完全指南:创建、调用、参数传递、返回值解析
C 语言中的函数 函数是一段代码块,只有在被调用时才会运行. 您可以将数据(称为参数)传递给函数. 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用. 预定义函数 事实证明,您已 ...
- Python3中pip3命令的用法介绍及安装配置
第一节:pip3是什么?有啥用? pip3:(Python3 Install Package ),这个英文全称是我为了更好的理解这个命令这么叫的,官方没有这对个命令的全称的解释:) python 支持 ...
- CentOS 防火墙配置实战精要
防火墙是服务器最重要的安全屏障,正确的操作对应用也是非常非常关键,本文参考了一些实战经验并经过实验验证,集众家之长做了简单的归纳整理,希望能帮助你更好地操作防火墙. 设置CentOS防火墙开放端口 在 ...
- 试用阿里云GPU服务器进行深度学习模型训练
试用阿里云GPU服务器进行深度学习模型训练 最近在用PyTorch时发现在本地训练模型速度一言难尽,然后发现阿里云可以白嫖gpu服务器,只要没有申请过PAI-DSW资源的新老用户都可以申请5000CU ...
- Faiss 向量库编译安装
Faiss 是 Facebook 开源的一套高效相似性搜索以及向量聚类的开发库,支持各类相似性搜索的算法,Faiss 项目本身是使用 C++ 编写的,但是提供 Python 的绑定,可以直接使用 nu ...
- 《C# in depth》第5章C#5.0中的更改(十三)——異步枚舉器
一.異步枚舉 异步枚举器(Async Enumerator)是指一种异步迭代器,可以用于处理异步数据源.它允许我们以异步的方式逐个读取数据源中的元素. 在传统的同步枚举器中,当我们遍历一个集合时,程序 ...