文章目录
可调用对象
在C++中,可以像函数一样调用的有:
普通函数、类的静态成员函数、仿函数、lambda 函数、类的成员函数、可被转换为函数的类的对象,统称可调用对象或函数对象。
可调用对象有类型,可以用指针存储他们的地址,可以被引用
普通函数
普通函数类型可以声明函数、定义函数指针和函数引用,但是,不能定义函数的实体
#include<iostream>
#include<string>
using namespace std;
using Fun = void(int,const string&);
Fun show;//声明普通函数show 不能用函数类型定义函数
void show(int x,const string&s){
cout<< x <<"--"<< s <<endl;
}
int main(){
show(1,"我是一个鸟");
void (*f1)(int,const string&) = show;//函数指针指向函数
void (&f2)(int,const string&) = show;//函数引用指向函数
f1(2,"hello");
f2(3,"world");
Fun *f3 = show;//函数指针指向函数
Fun &f4 = show;//函数引用指向函数
f3(4,"hello");
f4(5,"world");
return 0;
}
类的静态成员函数
类的静态成员函数和普通函数本质上是一样的,把普通函数放在类中而已
#include<iostream>
#include<string>
using namespace std;
using Fun = void(int,const string&);
Fun show;//声明普通函数show 不能用函数类型定义函数
struct AA{
static void show(int x,const string&s){
cout<< x <<"--"<< s <<endl;
}
};
int main(){
AA::show(1,"我是一个鸟");
void (*f1)(int,const string&) = AA::show;//函数指针指向函数
void (&f2)(int,const string&) = AA::show;//函数引用指向函数
f1(2,"hello");
f2(3,"world");
Fun *f3 = AA::show;//函数指针指向函数
Fun &f4 = AA::show;//函数引用指向函数
f3(4,"hello");
f4(5,"world");
return 0;
}
仿函数
本质是类
class TT{
public:
void operator()(int b,const string&s){
cout<< b<<"=="<<s <<endl;
}
};
int main() {
TT t;
t(0,"dad");//对象调用
TT()(1,"dasd");//匿名对象调用仿函数
TT&t0 = t;
t0(2