跳至主要內容

面试八股文

LincZero大约 2 分钟

面试八股文

C++11

function、lambda、bind之间的关系

  • std::function模板
    • 是什么?| 是一个抽象了函数参数以及函数返回值的类模板
    • 抽象
      • 把任意函数包装成一个对象,该对象可以保存、传递、复制
      • 动态绑定,只需修改该对象(赋值不同的fucntion对象),实现类似多态的效果
    • 用途
      • 保存普通函数,类的静态成员函数
      • 保存仿函数
      • 保存类成员函数
  • 仿函数(函数对象)
    • 是什么?| 重载了操作符()的类
    • 特征
      • 可以有状态 ,通过变量进行存储状态
      • 有状态的函数对象称之为闭包
  • Lambda表达式
    • 是什么?| 一种方便创建匿名函数对象的语法糖
    • 构成
      • [] 捕获列表
        • 值捕获:默认只读不可改。mutable可读可写,并不会修改外部变量的值
        • 引用捕获:可读可写,会修改外部变量的值
        • [] 指定函数可以访问的外部变量
        • 本质:外部变量将转变为类的成员变量
      • () 参数列表
      • -> 指定返回值。可省略,因为有类型推导
      • {} 函数体

左值引用和右值引用的区别?右值引用的意义?

  • 表达式

    • 泛左值

      • 左值
      • 将亡值
    • 右值

      • 纯右值
      • 将亡值
  • 左值引用

    • 非常量:引用左值
    • 常量:也能引用右值
  • 右值引用

    • 引用右值
  • (从动机上猜测原因:肯定希望能引用就引用,因为能减少拷贝。而常量左值引用不可以修改内容,也就能无需地址。但非常量引用能修改地址,怕你强行引用做出危险操作)

  • 用处:避免对象拷贝

C++11的智能指针种类以及使用场景?

C++11 override, final 关键字的作用?

C++11 类型推导

C++11 用过什么新特性?