C++primer 第十四章笔记 初稿

14.1 函数调用运算符

  1. 基本情况

    • 重载的运算符:()
    • 该类的对象为函数对象,可以用作泛型算法的实参
  2. 与lambda表达式的关系

    • lambda表达式中的形参是函数对象的数据成员
    • lambda表达式中的捕获列表是函数对象的形参
    • lambda表达式很方便,当某个操作不经常使用又很简单时,可用lambda来代替函数对象
  3. 标准库中的函数对象

    • 头文件:functional
    • 模式:模板
    • 注意点
      • 在定义优先队列等适配器时,需同时声明队列的默认容器,且不加函数对象的调用运算符
      • 在使用泛型算法时,需加函数对象的调用运算符
  4. 三种表达函数方式的整合

    • 头文件:functional
    • 关键字:function
    • 函数的三种表达方式
      • 普通函数
      • 函数对象
      • lambda表达式
    • 要求:function是模板,必须提供函数的有关信息(签名)

    注:如果因为重载函数而出现二义性,可通过存储函数指针或生成一个lambda表达式完成。

14.2 类型转换运算符

  1. 基本情况

    • 形式:operator type()
    • 要求:可以转换成指针和引用,但不能直接转换成数组或函数。

    注:类型转换不能过度定义

  2. 显示的类型转换

    • 问题:没有定义相关操作的对象,可能通过类型转换产生意想不到的结果。
    • 方法:在定义时注明explicit,表明必须通过静态转换才能实现。
  3. 对于重载的运算符,无论是成员或非成员函数,都在匹配范围内。

你可能感兴趣的:(C++,primer)