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;
}