• 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的转换”之间。

  • 相关阅读:
    iozone的三大神器之一fileop
    nginx反向代理配置相对路径
    自建yum源解决Ceph搭建过程中从官网取包慢的问题
    SourceInsight 4重启之后文件变只读无法编辑
    Android应用启动时Activity被创建两次
    mfscli的使用方法(解决mfscgi响应慢的问题)
    漫谈moosefs中cgi各项的意义
    Linux stress CPU的测试方法
    磁盘测试工具FIO工具安装和使用方法
    iperf测试工具
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7261593.html
Copyright © 2020-2023  润新知