c++11系列-lambda表达式的实现

2018-03-27  本文已影响0人  z6ZKH4

c++增加了function对象,对所有的可调用对象的抽象表达:

lambda的完全表达:

[捕获列表](形参表)mutable -> 返回值类型 {函数体}
  1. 捕获列表: 可选符号 = (拷贝捕获); &(引用捕获); this(引用捕获当前变量)
  2. 形参表: 函数的参数表
  3. mutable: 函数调用默认是按照const调用的,任何修改值类型的需要添加mutable
  4. 返回值类型
  5. 函数定义

实例:

function <int()> Counter(int inital = 0)
{
    int count = inital;
    return [count]() mutable -> int { return count++};
}

内部可能的实现,编译器会将lambda表达式转换成一个匿名的函数对象

class Counter
{
public:
    Counter(int _c) : count(_c) {};

    int operator()() const
    {
        return count++;
    }
private:
    mutable int count;
};
上一篇 下一篇

猜你喜欢

热点阅读