首页
清单
分类
标签
归档
图库
哔哔
留言板
友链
关于
1
Linux 系统编程 | 2. 文件IO
2
Linux 系统编程 | 1. Linux 基础
3
条款44 将与参数无关的代码抽离 templates
4
条款42 了解 typename 的双重意义
5
条款41 了解隐式接口和编译期多态
如此肤浅
但行好事,莫问前程!
累计撰写
52
篇文章
累计创建
6
个标签
累计收到
6
条评论
栏目
首页
清单
分类
标签
归档
图库
哔哔
留言板
友链
关于
搜索
标签搜索
Linux系统编程
Effective C++
软件安装
Nginx
Docker
C++
目 录
CONTENT
以下是
Effective C++
相关的文章
2022-06-10
条款44 将与参数无关的代码抽离 templates
1. Templates 生成多个 classes 和多个函数,所以任何 template 代码都不该与某个造成膨胀的 template 参数产生相依关系。 2. 因非类型模板参数(non-type template parameters)而造成的代码膨胀,往往可消除,做法是以函数参数或 class 成员变量替换 template 参数。 3. 因类型参数(type parameters)而造成的代码膨胀,往往可降低,做法是让带有完全相同二进制表述(binary representations)的具现类型(instantiation types))共享实现码。
2022-06-10
36
0
0
Effective C++
2022-06-10
条款42 了解 typename 的双重意义
1. 声明 template 参数时,前缀关键字 class 和 typename 可互换。 2. 请使用关键字 typename 标识嵌套从属类型名称;但不得在 base class lists(基类列)或 member initialization list(成员初值列)内以它作为 base class 修饰符。
2022-06-10
26
0
0
Effective C++
2022-06-10
条款41 了解隐式接口和编译期多态
1. classes 和 templates 都支持接口(interfaces)和多态(polymorphism) 。 2. 对 classes 而言接口是显式的(explicit),以函数签名(也就是函数名称、参数类型、返回类型)为中心。多态则是通过 virtual 函数发生于运行期。 3. 对 template 参数而言,接口是隐式的(implicit),奠基于有效表达式。多态则是通过 template 具现化和函数重载解析(function overloading resolution)发生于编译期。
2022-06-10
32
0
0
Effective C++
2022-06-09
条款40 明智而审慎地使用多重继承
1. 多重继承比单一继承复杂。它可能导致新的歧义性,以及对 virtual 继承的需要。 2. virtual 继承会增加大小、速度、初始化(及赋值)复杂度等等成本。如果 virtual base classes 不带任何数据,将是最具实用价值的情况。 3. 多重继承的确有正当用途。其中一个情节涉及“public 继承某个 Interface class”和“private 继承某个协助实现的 class”的两相组合。
2022-06-09
24
0
0
Effective C++
2022-06-08
条款39 明智而审慎地使用 private 继承
1. Private 继承意味 is-implemented-in-terms of(根据某物实现出)。它通常比复合(composition)的级别低。但是当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的。 2. 和复合(composition)不同,private 继承可以造成 empty base 最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。
2022-06-08
70
2
0
Effective C++
2022-06-08
条款38 通过复合塑模出 has-a 或“根据某物实现出”
1. 复合(composition)的意义和 public 继承完全不同。 2. 在应用域(application domain),复合意味 has-a (有一个)。在实现域(implcmentation domain),复合意味 is-implemented-in-terms-of(根据某物实现出)。
2022-06-08
22
0
0
Effective C++
2022-06-08
条款37 绝不重新定义继承而来的缺省参数值
1. 绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而 virtual 函数——你唯一应该覆写的东西——却是动态绑定。
2022-06-08
25
0
0
Effective C++
2022-06-08
条款36 绝不重新定义继承而来的 non-virtual 函数
1. 绝对不要重新定义继承而来的 non-virtual 函数。
2022-06-08
25
0
0
Effective C++
2022-06-07
条款34 区分接口继承和实现继承
1. 接口继承和实现继承不同。在 public 继承之下,derived classes 总是继承 base class 的接口。 2. pure virtual 函数只具体指定接口继承。 3. 简朴的(非纯)impure virtual 函数具体指定接口继承及缺省实现继承。 4. non-virtual 函数具体指定接口继承以及强制性实现继承。
2022-06-07
24
0
0
Effective C++
2022-06-07
条款33 避免遮掩继承而来的名称
1. derived classes 内的名称会遮掩 base classes 内的名称。在 public 继承下从来没有人希望如此。 2. 为了让被遮掩的名称再见天日,可使用 using 声明式或转交函数(forwarding functions)。
2022-06-07
26
0
0
Effective C++
1
2
3
4