读书笔记
_浮生_
More important things ahead, calm down and press forward with speed and urgency
展开
-
[读书笔记] - 《深度探索C++对象模型》第6章 & 第7章
1.全局对象 Matrix identity; main() { // identity必须在此处被初始化 Matric m1 = identity; ... return 0; } 像identity这样的所谓global object如果有constructor和destructor的话,我们说它需要静态的初始化操作和内存释放操作。 C++程序中所有的global objects都被放置在程序的data segment中。如果明确指定给它一个值,object将原创 2020-06-26 14:41:52 · 171 阅读 · 0 评论 -
[读书笔记] - 《深度探索C++对象模型》第5章 构造、解构、拷贝语意学
1.纯虚函数 纯虚函数可以被定义和调用,不过它只能被静态地调用,不能经由虚拟机制调用。 // 定义pure virtual function inline void Abstract_base::interface() const { } inline void Concrete_derived::interface() const { // ok: 静态调用 Abstract_base::interface(); } 要不要定义纯虚函数,全由class设计者决定。但是pure原创 2020-06-19 15:21:53 · 242 阅读 · 0 评论 -
[读书笔记] - 《深度探索C++对象模型》第4章 Function语意学
1. Member的各种调用方式 C++支持三种类型的member functions: static、nonstatic和virtual,每一种类型被调用的方式都不相同。 1.1 Nonstatic Member Functions C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。下面是一个nonmember function的定义: float magnitude3d(const Point3d* _原创 2020-06-13 18:49:19 · 275 阅读 · 0 评论 -
[读书笔记] - 《深度探索C++对象模型》第3章 Data语意学
一个空的class,如: // sizeof X == 1 class X { }; 事实上并不是空的,它有一个隐晦的1 byte,那是被编译器安插进去的一个char。这使得这个class的两个objects得以在内存中配置独一无二的地址。 1.Data Memeber的绑定 在下面的程序中,length的类型在两个member function signatuures中都解析为global typedef,也就是int。当后续再有length的nested typedef声明出现时,C++ St原创 2020-06-06 18:40:20 · 274 阅读 · 0 评论 -
[读书笔记] - 《深度探索C++对象模型》第2章 构造函数语意学
1.Default Constructor的建构操作 1.1C++ Annotated Reference Manual(ARM)中的Section12.1告诉我们:“default constructor...在需要的时候被编译器产生出来”。 class Foo { public: int val; Foo *pnext; }; void foo_bar() { // oops: 程序要求bar's members都被清为0 Foo bar; if(bar.val || .原创 2020-05-31 16:05:30 · 220 阅读 · 0 评论 -
[读书笔记] - 《深度探索C++对象模型》第1章 关于对象
1.C++在布局以及存取时间上主要的额外负担是由virtual引起,包括: 1>virtual function机制:用以支持一个有效率的“执行期绑定”(runtime binding). 2>virtual base class: 用以实现“多次出现在继承体系中的“base class, 有一个单一而被共享的实体”。 2.在C++中,有两种class data members: static和nonstatic,以及三种class member functions: static、.原创 2020-05-23 11:16:32 · 266 阅读 · 0 评论 -
[读书笔记] -《C++ API设计》第7章 性能
1、前置声明 头文件A包含另一个头文件B,是为了引入在头文件A中使用到的类、函数、结构体、枚举或其他实体的声明。在面向对象程序中,最常见的情况是头文件A想要引入头文件B中一个或多个类的声明。不过,很多情况下头文件A实际上不必包含头文件B,而只需要提供所需类的前置声明即可。前置声明可以在下列几种情况下使用。 1>不需要知道类的大小。如果包含的类要作为成员变量或打算从包含类派...原创 2019-11-30 22:47:43 · 165 阅读 · 0 评论 -
[读书笔记] -《C++ API设计》第6章 C++用法
1、使用命名空间特性会产生冗长的符号名,尤其是那些包含在几层嵌套命名空间中的符号。好在C++提供了使用using关键字,是的命名空间里的符号更加容易使用: using namespace std; string str("Look, no std::"); 而更好的方式(因为它限定了引入全局命名空间的符号范围)是: using std::string; string str("Look,...原创 2019-11-30 20:07:22 · 162 阅读 · 0 评论