Effective C++--经验条款
高效C++ --模板与泛型编程
在C++中模板体现的是编译期多态,virtual体现的是执行期多态。
关于typename的双重含义:
在声明template參数时,不论使用keywordclass或typename,意义全然同样。
可是C++并不总是把class和typename视为等价。
有时候必须使用typename。
Template内出血的名称假设依于某个template參数,称之为从属名称。假设从属名称在class内呈嵌套状,我们称她为嵌套从属名称。
总而言之,在一个模板中使用了还有一个模板内的參数类型,就须要使用typename表明所使用的这个变量是属于一个模板中的类型。
不论什么时候当你想要在template中值涉一个嵌套从属类型名称,就必须在紧邻他的前一个位置放上keywordtypename
使用typename表示嵌套从属类型名称。但不得在base class list(基类列)或member initialization list(成员初值列)内以它作为baseclass修饰符。
在使用new申请内存时,假设内存空间不足。可能会有异常发生,可是能够从外界设置异常发生时调用的函数。set_new_handler
区分接口继承和实现继承:
函数接口继承和函数实现继承。这两种继承的差异,非常像函数声明与函数定义之间的差异。
有时候希望derived classes仅仅继承成员函数的接口(也就是声明);有时候你又会希望derived classes同一时候继承函数的接口与实现。但又希望可以override他们所继承的实现;又有时候你希望derived classes同一时候继承函数的接口和实现。而且不同意override不论什么东西。
事实上上面的三种情况分别相应三种情况,各自是纯虚函数,虚函数,和基类的函数
声明一个pure virtual函数的目的是为了让derived classes仅仅继承函数接口。
声明简朴的impure virtual函数的目的。是让derived classses继承该函数的接口和缺省实现。
声明non-virtual函数的目的是为了令derived classes继承函数的接口及一份强制性实现。
模板特化的方法。对于模板的特化就像是又定义了一个模板,只是这个模板的參数是已经规定好的,所以的template里面就不须要定义typename。相当于模板的重载,仅仅只是这个模板的參数是已经规定好了的。
Effective C++中提到过。使用const enum inline取代#define,这里的意思是前面能够替代后面。由于对于#define来说。将来替换的始终是文本。假设有错或者使用#define不是非常恰当,可能在编译的时候不会出错可是在执行过程会出错。假设是使用前者来搞定这些,他们假设有错,在编译的时候是能够发现的。
眼下全部编译器对于virtual function 的实现方法都是使用各个class专属的virtual table。大小固定,而且在程序运行前就构造好了。
C++在布局以及存取时间上基本的额外负担是由virtual引起的。
Virtual function机制:用以支持一个有效率的“运行期绑定”
Virtual base class用以实现“多次出如今继承体系的base class 有一个单一而被共享的实体”
这两种机制分别相应子类中的vptr vbtr子类中有两个指针。分别运行他们
另一些多重继承下的额外负担,发生在“一个derived class和其第二或后继之base class的转换”之间。
Effective C++--经验条款的更多相关文章
- 《More Effective C++》 条款5 谨慎定义类型转换函数
		
---恢复内容开始--- C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换 ...
 - 《MORE EFFECTIVE C++》条款20 条款21
		
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数, ...
 - 《Effective C++》条款26 防卫潜伏的ambiguity模棱两可的状态
		
每个人都有思想.有些人相信自由经济学,有些人相信来生.有些人甚至相信COBOL是一种真正的程序设计语言.C++也有一种思想:它认为潜在的二义性不是一种错误.ambiguity 这是潜在二义性的一个例子 ...
 - 《Effective C++》条款14 总是让base class拥有virtual destructor
		
有时,一个类想跟踪它有多少个对象存在.一个简单的方法是创建一个静态类成员来统计对象的个数.这个成员被初始化为0,在构造函数里加1,析构函数里减1.(条款m26里说明了如何把这种方法封装起来以便很容易地 ...
 - Effective C++:条款37:绝不又一次定义继承而来的缺省參数值
		
因为又一次定义继承而来的non-virtual函数是不对的(见上一个条款),所以这个条款就将问题局限于:绝不又一次定义继承一个带有缺省參数值的virtual函数. (一) virtual函数是动态绑定 ...
 - Effective C++:条款28:避免返回 handles 指向对象内部成员
		
(一) 有时候为了让一个对象尽量小,能够把数据放在另外一个辅助的struct中,然后再让一个类去指向它.看以下的代码: class Point { public: Point(int x, int y ...
 - Effective C++:条款25:考虑写出一个不抛异常的swap函数
		
(一) 缺省情况下swap动作可由标准程序库提供的swap算法完毕: namespace std { template<typename T> void swap(T& a, T& ...
 - Effective C++:条款14:在中小企业资源管理copying表现
		
(一) 在一项条款说法auto_ptr和tr1::share_ptr适合heap-based资源.然而,并非所有的资源都heap-based的.换句话说不tr1::shared_ptr 和 auto_ ...
 - More Effective C++ 35 条款
		
一.基础议题(basics) 条款1:仔细区别 pointers 和 references(Distinguish between pointers and references) 一个基本的语法问题 ...
 
随机推荐
- 《c程序设计语言》读书笔记-5.5-指针实现strncpy,strncat,strncmp
			
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> ...
 - code forces 994B
			
B. Knights of a Polygonal Table time limit per test 1 second memory limit per test 256 megabytes inp ...
 - 一天一条linux命令  for zipon
			
linux学习网站:https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/index.html 19.dhclient eth0 使网卡生效, ...
 - 用VS2010编写的C++程序,在其他电脑上无法运行的问题
			
问题:在自己电脑上用VS2010编写的VC++程序(使用MFC库),不能在其他电脑上运行.双击提示: “无法启动此程序,因为计算机中丢失mfc100u.dll 尝试重新安装该程序以解决此问题. 解决方 ...
 - OwnCloud 搭建
			
owncloud 的安装方式可以在 [ 官网 ] 找到. 本文会说明 owncloud 在 CentOS 7.x 上基于 LAMP 安装, 以及简单的用 docker 镜像启动的例子. 基于 LAMP ...
 - 神奇的幻方(NOIP2015)(真·纯模拟)
			
原题传送门 这是道SB模拟题,NOIP--难度 直接贴代码 #include<iostream> #include<cstdio> using namespace std; , ...
 - [BZOJ1017][JSOI2008]魔兽地图DotR 树形dp
			
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2597 Solved: 1010[Submit][ ...
 - HDU 1754.I Hate It-完全版线段树(单点替换、区间最值)
			
HDU1754.I Hate It 直接模板就可以了 代码: //B #include<iostream> #include<cstdio> #include<cstri ...
 - (8)java基础知识-字符编码
			
这块比较乱待整理... http://www.regexlab.com/zh/encoding.htm 字符编码 将各种文字.图形.标点.数字整合在一个集合叫做字符集. 把这些字符集按照不用规则进行编 ...
 - 第十四届华中科技大学程序设计竞赛 B Beautiful Trees Cutting【组合数学/费马小定理求逆元/快速幂】
			
链接:https://www.nowcoder.com/acm/contest/106/B 来源:牛客网 题目描述 It's universally acknowledged that there'r ...