扫帚的影子对《Imperfect C++中文版》的笔记(17)
扫帚的影子 (弱水三千,只取一瓢)
-
第3页 序言
唉,我也要为我自已曾滥用 c++的强大功能而忏悔
-
第5页 序言
-
第8页 POD
1、 所有标量类型(基本类型和指针类型)、POD结构类型、POD联合类型、以及这几种类型的数组、const/volatile修饰的版 本都是POD类型。 2、 POD结构/联合类型:一个聚合体(包括class),它的非static成员都不是pointer to class member、 pointer to class member function、非POD结构、非POD联合,以及这些类型的数组、引用、const/ volatile修饰的版本; 并且,此聚合体不能有用户自定义的构造函数、析构函数、拷贝构造函数. 3、 POD类型可以具有static成员、成员typedef、嵌套struct/class定义和 成员函数/方法。 (C++标准)给出的定义: 将对象的各字节拷贝到一个字节数组中,然后再将它重新拷贝到原先的对象所占的存储区中,此时该对象应该具有它原来的值。 POD类型的特点: 所有POD类型都可以作为union的成员,反之,所有非POD类型都不能作为union的成员。 POD特性利用: 我们可以利用POD类型特性来判断一个类型是否为POD类型: template<class T> struct must_be_pod { union { T noname; }; }; 这个模板的意思是,只要类型T是非POD类型,那么编译器将报错,因为T被作为了union的一个成员。 VS2008里的测试代码如下: class A { public: A(){} void f() { cout << "A::F" << endl; } protected: private: int i; int j; }; template<class T> struct must_be_pod { union { T noname; }; }; must_be_pod<A> a; 编译器会报错:1>member 'must_be_pod<T>::noname' of union 'must_be_pod<T>::<unnamed-tag>' has user-defined constructor or non-trivial default constructor 其实POD本质就是与c兼容的数据类型。
-
第12页 第1章 强制设计: 约束,契约和断言
bug越早捕获越好,成本越低,代价越小 作为程序员手要勤快,不要发懒。 不要着急coding,最好在下笔之前成竹于胸
-
第21页 约束
模板元编程,这个有意思:)
-
第20页 约束
哈哈,有没有哪位定义好了一系统约束可以共享下撒
-
第26页 类不变式
类不变式,这个概念第一次听说,在类中实现一个类似于vaild()的验证函数来check对象当前的态度是否符合类设计者的既定要求。
-
第34页 断言
小assert, 大学问
-
第39页 静态断言
如果必须要声明这个变量,比如 int a; 而这个a又不被使用,则可以这样typedef int a;
-
第40页
下载的pdf太不靠谱,直接从第1章跳到第7章。看文件大小也看得出来
扫帚的影子的其他笔记 · · · · · · ( 全部89条 )
- 凤凰项目(修订版)
- 1
- 大路
- 1
- 代码整洁之道
- 2
- Dive Into Python
- 1
- 看见
- 1
- 程序员的自我修养
- 7
- TCP/IP高效编程
- 6
- 天书夜读
- 1
- MongoDB权威指南
- 7
- 自然光人像摄影指南
- 9
- 人月神话
- 19
- Debug Hacks中文版
- 4
- 大规模C++程序设计
- 13