zoukankan      html  css  js  c++  java
  • 《C++必知必会》读书笔记2

    在类X的非常量成员函数中,this指针的类型为 X *const .也就是说他是指向非常量X的常量指针。

    但是在类X的常量成员函数中,this的类型为const X* const . 这就是常量成员函数和非常量成员函数的区别。

    类的非静态数据成员可以被声明为mutable,这将容许她们的值可以被这个类的常量成员函数(也包括非常量成员函数)修改。

    如果一个类声明了一个或者多个虚函数,那么编译器会为这个类的每一个对象插入一个指向虚函数表的指针。

    如果使用了虚拟继承,对象将会通过嵌入的指针,偏移量或者其他非嵌入的信息来维持对其虚基类自对象位置的跟踪。因此,即使类没有声明虚函数,其中还是有坑被插入了一个虚函数表的指针。

    对于一个类X来说,复制构造函数应该被声明为 X (const X &);  而复制赋值操作符应该被声明为X& operator=(const X&) 。

    将一个函数的地址初始化或赋值给一个指向函数的指针的时候,无需显式的取得函数地址,编译器知道隐式的获取函数的地址,因此在这种情况下,&操作符是可选的。比如:

    void (*fp)(int );

    extern void h(int);

    fp=h;  //OK

    fp= &h; //OK

    类似的,可以采用如下的方式调用函数:

    fp(12); 或者 (*fp)(12);

    注意,和void * 指针可以指向任何类型的数据不同,不存在可以指向任何类型函数的通用指针。

    还要注意,非静态成员函数的地址不是一个指针,因此不可以将一个函数指针指向一个非静态成员函数。

    函数指针的一个传统用途是实现回调。

    一个函数指针指向内联函数是合法的。但是如果通过函数指针调用内联函数将不会导致内联函数的调用,因为编译器通常无法在编译阶段确定将会调用什么函数。

  • 相关阅读:
    Neo4j简介
    HiBench算法简介
    Spark性能测试工具
    常用Benchmark
    Mapreduce的性能调优
    YARN node labels
    Yarn on Docker集群方案
    YARN on Docker
    HDP YARN MapReduce参数调优建议
    JVM优化:生产环境参数实例及分析
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2416240.html
Copyright © 2011-2022 走看看