Effective C++读书笔记 之导读

news/2024/5/19 2:03:44 标签: 读书, c++, templates, function, 编译器, iterator
 

0 导读

1、设计策略

如何在两个不同的做法中择一完成某项任务,如

该选择inheritance(继承)还是templates(模板)?该选择public继承还是private继承?该选择private继承还是composition(复合)?该选择member函数还是non-member函数?该选择pass-by-value还是pass-by-reference?….

什么是assignment操作符的适当返回类型?何时该令析构函数为virtual?当operator new无法找到足够的内存时该如何行事?…..

2、术语

声明式(declaration):告诉编译器某个东西的名称和类型,但略去细节。如

extern int x;

std::size_t numDigits(int number);

/*

std::size_t,表示类型size_t位于命名空间std内。而继承自c动符号(如size_t)有可能存在于global作用域或std内,甚至两个兼具,取决于哪个头文件被含入(#included).

 

每个函数的声明揭示其签名式(signature),也就是参数类型和返回类型。如,numDigits函数的签名是std::size_t (int)。但c++对签名的官方定义并不包含返回类型。

*/

class Widget;

template<typename T> class GraphNode;

 

定义式(definition):告诉编译器声明式所遗漏的细节。对对象而言,定义式是编译器对此对象拨发内存的地点;对functionfunction template而言,定义式提供了代码本体;对class或class template而言,定义式列出它们的成员。

 

初始化(Initialization):“给予对象初值”的过程。对用户自定义的类型的对象而言,初始化由构造函数执行。

 

default构造函数:是一个可被调用而不带任何实参的类成员函数。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。

 

explicit构造函数:可以阻止它们被用来执行隐式类型转换(implicit type conversions),但可显式转换(explicit type conversions)。被声明为explicit第构造函数通常比其non-explicit兄弟更受欢迎,因为他禁止编译器执行预期(往往是不期望)的类型转换。把构造函数声明为explicit!

 

copy构造函数:以同型对象初始化新自我对象。

copy assignment操作符:从一个同型对象中拷贝其值到另一个自我对象。

 

pass-by-value:意味“调用copy构造函数”。以by-value传递用户自定义类型通常是个坏主意,pass-by-reference-to-const往往是比较好的选择。

 

STL:标准模板库(Standard Template Library),包含容器(如vector, list, set, map等等)、迭代器(如vector<int>::iterator, set<string>::const_iterator等等)、算法(如for_each, find, sort等等)机能。

函数对象(function objects):行为像函数的对象,这样的对象来自于重载operator()(function call 操作符)的classes。

 

行为没有定义:你无法稳定预估运行期会发生什么事。如

int* p = 0;

std::cout << *p; //对一个null指针取值会导致不明确行为。

 

接口(interface):Java和.NET语言都提供Interfaces为语言元素,但c++没有。

 

客户(client):某人或某物,他(或它)使用你的代码(通常是一些接口)。一般指程序员。

3、TR1和Boost

TR1(Technical Report 1):一份规范,描述加入C++标准程序库的诸多新机能。这些机能以新的class templatesfunction templates形式体现,有hash tables, reference-counting smart pointers, regular expressions等,所有TR1组件都被置于命名空间tr1中,tr1则位于std内(即std::tr1)。

Boost是个组织,提供可移植、同僚复审、源码开放的c++程序库。大多数TR1机能是以Boost的工作为基础的。Boost提供比TR1更多的东西。


 


http://www.niftyadmin.cn/n/1713804.html

相关文章

linux---vim---ctag

【前言】ctags是vim的一个非常有用的插件&#xff0c;可以大大提高程序编码(C、C)的效率&#xff0c;比如快速调整到函数、变量定义处等等常用 功能&#xff0c;更详细的功能&#xff0c;自行百度。【目的】在RHEL 5上面安装配置vim插件ctags 【前提条件】vim已经安装 【安装ct…

打造自己的专属Linux(一):快速建立一个小型Linux .

我的linux版本&#xff1a;redhat 5.4虚拟机客户端&#xff1a;Vmware Workstation 6.5我们分步骤来实现这个小型linux第一步&#xff1a;在虚拟机上添加一块新硬盘到linux&#xff0c;大小20G &#xff08;可以自定&#xff09;第二步&#xff1a;1)打开终端&#xff0c;使用f…

C++的拷贝构造函数(深拷贝、浅拷贝)

深拷贝和浅拷贝可以简单理解为&#xff1a;如果一个类拥有资源&#xff0c;当这个类的对象发生复制过程的时候&#xff0c;资源重新分配&#xff0c;这个过程就是深拷贝&#xff0c;反之&#xff0c;没有重新分配资源&#xff0c;就是浅拷贝。下面举个深拷贝的例子。 #include …

C++引用与指针的比较

C引用与指针的比较 引用是C中的概念&#xff0c;初学者容易把引用和指针混淆一起。 一下程序中&#xff0c;n是m的一个引用&#xff08;reference&#xff09;&#xff0c;m是被引用物&#xff08;referent&#xff09;。 int m; int &n m; n相当于m的别名&#xff08;…

C语言实现 HashTable

简单实现了哈希表的插入和查找功能&#xff0c;简要说明如下&#xff1a; 1、数据结构&#xff1a; struct HashNode { char* sKey; //键 int nValue; //值 HashNode* pNext; //当Hash值冲突时&#xff0c;指向HASH值相同的下一个节点。 } HashNode* hashTable[HASH_T…

读 《技术人员的成长》

下面的这篇文章对我的影响很大&#xff0c;可以说在我人生的拐角处帮了我一把。所以下面把它放到自己的博客里&#xff0c;望时刻激励自己。 首先&#xff0c;纠正一个流行的概念&#xff0c;估计大家都听说过“软件技术人员的工作寿命只能到30岁”。如果你相信这个说法&#x…

c++ 的4种类型转化方式

具体归纳如下: &#xff08;1&#xff09;reinterpret_cast 该函数将一个类型的指针转换为另一个类型的指针. 这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到. reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指…

CPU的大端模式和小端模式

大端格式&#xff1a; 在这种格式中&#xff0c;字数据的高字节存储在低地址中&#xff0c;而字数据的低字节则存放在高地址中。 小端格式&#xff1a; 与大端存储格式相反&#xff0c;在小端存储格式中&#xff0c;低地址中存放的是字数据的低字节&#xff0c;高地址存放的…