Effctive C++ 学习笔记(一)
术语
declaration 声明式
declaration是告诉编译器某个东西的名称和类型(type),但略去细节。
例如:
extern int x; //object declaration
std::size)t numDigits(int number); //function decalration
class Widget; //class decalration
tmplate<typename T>; //template decalaration
class GraphNode; //use of "typename"
signature 签名式:也就是参数和返回类型
definition 定义式:提供编译器一些声明式所遗漏的细节。
initialization 初始化:给予对象初值的过程。
implicit type conversions 隐式类型转换
explicit type conversions 显示类型转换
passed by value 以值传递
STL Standard Template Library 标准模板库
01 View C++ as a fedration of languages
将C++视作一个语言联邦
今天的C++已经是一个多重范型编程语言(multiparadigm programming language),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functionla)、泛型形式(generic)、元编程形式(metaprogramming)的语言。
此处作者认为,我们应该将C++视为一个由相关语言组成的联邦而非单一语言。在其某个次语言(sublanguage)中,各种守则与通例都倾向简单、直观易懂、并且容易记住。当我们从一个次语言移动到另一个次语言,守则可能改变。主要的次语言包括四个
- **C 。**C++以C为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、数组(arrays)、指针(pointers)。
- **Object-Oriented C++。**这部分也就是C with Classes所诉求的: classes (包括构造函数和析构函数), 封装(encapsulation )、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)。
- **Template C++ 。**这是C++的泛型变成(generic programming)部分。template威力强大,它们带来崭新的编程范型(programming paradigm),也就是所谓的template metaprogramming (TMP,模板元变成)。
- **STL。**STL是个template程序库,但它是非常特殊的一个。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象的规约有极佳的紧密配合和协调,然而templates及程序库也可以由其他想法构建出来。
从某个次语言切换到另一个,导致高效编程守则要求你改变策略时,是正常的,
例如,对内置(C-like)类型而言,pass-by-value 通常比pass-by-referenc-to-const往往更好。所以C++高效编程守则视状况而改变。