之前对C++中的多种可调用对象的使用总感觉很模糊,今天重新翻看了一下,总结成文如下。
C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、函数对象。其中lambda表达式和bind对象是C++11标准中提出的(bind机制并不是新标准中首次提出,而是对旧版本中bind1st和bind2st的合并)。个人认为五种可调用对象中,函数和函数指针本质相同,而lambda表达式、bind对象及函数对象则异曲同工。下面分别给出五种调用的使用:
1、函数。保证了对C的兼容。
C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、函数对象。其中lambda表达式和bind对象是C++11标准中提出的(bind机制并不是新标准中首次提出,而是对旧版本中bind1st和bind2st的合并)。个人认为五种可调用对象中,函数和函数指针本质相同,而lambda表达式、bind对象及函数对象则异曲同工。下面分别给出五种调用的使用:
1、函数。保证了对C的兼容。
2、函数指针。和数组名一样,函数名即为函数指针。
void fff(int x){ //被调用的函数
cout<<x<<endl;
}
void fcn(void (*fp)(int ),int x){ //形参为函数指针
fp(x);
}
typedef void (*Ftype)(int ); //定义一个函数指针类型Ftype
void fcn0(Ftype fp,int x){
fp(x);
}
int main(){
fcn(fff,100); //函数fcn调用函数fff
fcn0(fff,200); //函数fcn0调用函数fff
}
3、lambda表达式。lambda表达式就是一段可调用的代码。主要适合于只用到一两次的简短代码段。由于lambda是匿名的,所以保证了其不会被不安全的访问。lambda表达式的形式如下: