术语(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)的更多相关文章

  1. 《Effective Java 第三版》新条目介绍

    版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...

  2. C++学习书籍推荐《Effective C++ 第三版》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)>前两个版本抓住了全世界无数程序员的目光.原因十分明显:S ...

  3. Effective Java第三版(一) ——用静态工厂代替构造器

    此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<E ...

  4. effective java(第三版)---读书笔记

    第一章 引言 < Effective Java>这本书并不厚,而且并不适合初学者,适合有一定的工作经验的java攻城狮.这本书不是百科全书式的JAVA 手册,而是试图在讲述如何正确.高效地 ...

  5. 《Effective Java 第三版》目录汇总

    经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习.时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正. 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用静态工厂方法替 ...

  6. Effective Java 第三版——7. 消除过期的对象引用

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. Effective Java 第三版——9. 使用try-with-resources语句替代try-finally语句

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  8. Effective Java 第三版——10. 重写equals方法时遵守通用约定

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  9. Effective Java 第三版——11. 重写equals方法时同时也要重写hashcode方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  10. Effective Java 第三版——14.考虑实现Comparable接口

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

随机推荐

  1. node-xlsx处理excel

    引用node-xlsx npm install node-xlsx -save 文件中引用 const xlsx = require('node-xlsx') 读取excel const sheet ...

  2. JavaScript二代公民身份证号验证

    身份证号码中的校验码是身份证号码的最后一位,是根据[中华人民共和国国家标准GB 11643-1999]中有关公民身份号码的规定, 根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本 ...

  3. .net跨平台运行实践

    一个偶然的机会,一个朋友想做一个程序,同时支持windows和linux,本来想用go来写,奈何不太熟练,突然想到.net不是也支持跨平台了吗,还没有操作过,刚好可以试验一下. 最新的.net 6已经 ...

  4. 测试开发之前端篇-CSS层叠式样式表

    CSS是层叠样式表(Cascading Style Sheets)的缩写,用于描述如何在屏幕.纸张或其他媒体上显示HTML元素,包括了定义网页及其元素的布局.风格.大小.位置和颜色等属性. CSS的语 ...

  5. 测试开发之系统篇-Docker常用操作

    Docker容器(Container)的运行基于镜像(image),您可以在Docker Hub上检索,或通过Dockerfile文件自己构建镜像. 首先拉取MySQL官方镜像的最新版(latest) ...

  6. #拉格朗日插值,线性筛#洛谷 5442 【XR-2】约定 (加强版)

    题目 一个\(n\)个点的完全图, 第\(i\)个点到第\(j\)个点的边权是\((i+j)^k\), 现在把这个完全图变成一棵树, 求这棵树边权和的期望值 \((n\leq 10^{10000},k ...

  7. Docker 11 数据卷

    由来 Docker 是将应用和环境打包成一个镜像. 这样,数据就不应该保存在容器中,否则容器删除,数据就会丢失,有着非常大的风险. 为此,容器和主机之间需要有一个数据共享技术,使得在 Docker 容 ...

  8. Web Audio API 第4章 音调与频域

    音调与频域 此章中如果对音乐部分不感兴趣,可忽略 代码部分也没有更多的新 api ,重要的还是相关的物理与声音的相关知识 到目前为止我们已经学过了声音的基础属性:定时与音量.为了能处理更复杂的的情况, ...

  9. CentOS 编译安装golang

    一.下载go wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz 二.解压到指定目录 tar -xvf go1.16. ...

  10. 【译】宣布在 Visual Studio 17.10 预览2中为 ARM64 架构提供 SSDT

    我们很高兴地宣布在 ARM64 中为 Visual Studio 推出 SQL Server Data Tools(SSDT).这个增强是在令人兴奋的17.10预览版2中发布的.arm64 上 Vis ...