面试八股文
大约 2 分钟
面试八股文
C++11
function、lambda、bind之间的关系
- std::function模板
- 是什么?| 是一个抽象了函数参数以及函数返回值的类模板
- 抽象
- 把任意函数包装成一个对象,该对象可以保存、传递、复制
- 动态绑定,只需修改该对象(赋值不同的fucntion对象),实现类似多态的效果
- 用途
- 保存普通函数,类的静态成员函数
- 保存仿函数
- 保存类成员函数
- 仿函数(函数对象)
- 是什么?| 重载了操作符
()
的类 - 特征
- 可以有状态 ,通过变量进行存储状态
- 有状态的函数对象称之为闭包
- 是什么?| 重载了操作符
- Lambda表达式
- 是什么?| 一种方便创建匿名函数对象的语法糖
- 构成
- [] 捕获列表
- 值捕获:默认只读不可改。mutable可读可写,并不会修改外部变量的值
- 引用捕获:可读可写,会修改外部变量的值
- [] 指定函数可以访问的外部变量
- 本质:外部变量将转变为类的成员变量
- () 参数列表
- -> 指定返回值。可省略,因为有类型推导
- {} 函数体
- [] 捕获列表
左值引用和右值引用的区别?右值引用的意义?
表达式
泛左值
- 左值
- 将亡值
右值
- 纯右值
- 将亡值
左值引用
- 非常量:引用左值
- 常量:也能引用右值
右值引用
- 引用右值
(从动机上猜测原因:肯定希望能引用就引用,因为能减少拷贝。而常量左值引用不可以修改内容,也就能无需地址。但非常量引用能修改地址,怕你强行引用做出危险操作)
用处:避免对象拷贝