C++学习之函数对象和lambda表达式

文章介绍了C++中的函数对象,即重载了小括号运算符的类对象,并通过示例展示了如何创建和使用。接着,文章探讨了Lambda表达式,一种更简洁的匿名函数方式,允许在定义时自动推导类型,并详细解释了Lambda的各个部分,如捕获列表、返回类型和函数体。
摘要由CSDN通过智能技术生成

1.什么是函数对象?

答:函数对象就是重载小括号运算符的类对象

#include <iostream>

using namespace std;
//函数对象
template<class T>
class A
{
    T t;
public:
    A(T t)
    {
        this->t=t;
    }
    ~A()
    {

    }
    void operator ()()  //重载小括号运算符
    {
        cout<<t<<endl;
    }
};

int main(int argc, char *argv[])
{
   A<string> a("hello_world");
   a();
    return 0;
}

2.什么是lambda表达式:(升级版的函数指针)

#include <iostream>
using namespace std;
template <class T = void>
class A
{
public:
    void operator()()
    {
        cout << "hello_world" << endl;
    }
};
int main()
{
    A<> a;
    a();
    cout << "-------------------------" << endl;
    //auto 关键字用来让编译器自动推导类的。auto不可以做为函数参数类型。
    auto f = []()->void{
           cout << "hello_world" << endl;
    };
    f();
    //[]中表表函数对象中的构造的参数是否接外部变。
    //[]函数对象中不接收外部变量。
    //[=]函数对象使用拷贝赋值的方值传递外部变量
    //[&]函数对象中使用引用传递的方式传递外部变量。
    //()小括号就是函数对象的重载运算符的函数参数列表。
    //->返回值,如果这个返回值为void,可以不写。
    //{...} 就是函数对象小括号运算符重载函数的函数体。
    //所以使用Lambda表达式,更加简洁。
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值