- 本书目的,摘录如下:
本书的最佳用途就是彻底了解C++如何行为,为什么那么行为,以及如何运用其行为形成优势。 术语 声明式:
对象声明式和函数声明式:
extern int x; //对象(object)声明式
std:size_t numDigits(int number); // 函数声明式自定义类型,C++ with class部分:
class Widget; //类(class)声明式模板类型,C++ with template部分:
template
class GraphNode;
//模板(template)声明式术语 定义式, 是上面对应的定义:
对对象来说,定义式是编译器为此对象拨发内存的地点。 这个我的理解是:对象的定义式定义了对象创建时所需要多大内存,比如int型一般是4个字节,double型一般是8个字节。 只要定义了对象,程序肯定会申请内存。
对函数(function)或函数模板(function template)而言,定义式提供了代码本体。 这个我的理解: 也就是说定义了该函数被调用时,一步一步都会去干啥。
对class或class template而言,定义式列出它们的成员。 个人理解: 类的构造和析构函数:定义了该类如何创建对象和释放对象。 对象是存在于内存中的,占用了一定的内存空间。 普通函数:定义了该类的对象支持哪些功能,是如何实现这些功能的。- 具体搜下为什么C/C++要区分声明式和定义式 (Java只有定义式的):C++声明和定义的区别
从此文章可以看出,变量的定义只能1次,如果放在.h文件中,被其他文件include的话,就会发生重复定义了。 而声明则可以重复,所以.h文件中一般放变量的声明。
引用上面那篇博客的话:
以下3种定义可以放入头文件中:
a. 类的定义。
b. const变量的定义。因为const常量的作用域仅限于定义它的文件,所以可以在多个源文件中出现它的定义。
c. inline函数。
- 具体搜下为什么C/C++要区分声明式和定义式 (Java只有定义式的):C++声明和定义的区别
- 强调了构造函数声明时 explicit关键字。 不加的话,会有隐式转换, 不过有的时候确实想要隐式转换。 一般情况需要加explicit,这样必须使用声明的构造函数来转换类型。
- 如果调用到了copy构造函数,说明此时是passed by value 以值传递。 而在C++ with class部分,强调pass-by-reference-to-const, 这样不会调用copy构造函数,可以提高效率。
- 强调了不明确行为,C++程序要要尽可能避开不明确行为。
- 强调了C++说指的interface 接口是一般性的设计观念。 而在java或者.NET语言本身是提供Interface作为语言元素的。 C++ 可以用纯虚类来近似模拟java中的Interface。
effective C++ 学习 0_导读
最新推荐文章于 2024-04-23 18:50:34 发布