调用操作符和函数对象的疑惑

来源:互联网 发布:网络教育 考公务员 编辑:程序博客网 时间:2024/06/07 02:33
/*调用运算符和函数对象 部分内容摘自:C++ Primer 起初觉得这种写法很怪异,用结构体+重载“调用运算发”(就是圆括号),来实现函数的功能*/#include<iostream>using namespace std;/*封装了将int值转换为绝对值的操作*/struct absInt{int operator()(int val){return val<0 ? -val:val;}};/*取绝对值函数*/int AbsInt(int val){return val<0 ? -val:val;}int main(){int i = -42;int func_result = 0;absInt absObj;unsigned int ui = absObj(i);func_result = AbsInt(i);cout<<ui<<endl;;cout<<func_result<<endl;getchar();return 0;}/*  从上面的例子来说,我不觉得,这种重载函数调用操作符的操作会比直接使用函数好。  也许这种方法适合于某些特定场景,可是是什么场景呢?*/


http://zhidao.baidu.com/link?url=qSDqZlnk9YVhLHHG8MhWhYbLArWca4o8wS8pCRdgUbsDkC_UHP4Zm7KtaA7WHnXwInLsbSQco9IufACViyENgYaLONPcPS1V0GTXUpg1-ci

从上面的文章中得知,在向集合中添加数据时,运用它可以实现集合容器增加和查找内部数据的比较排序。另外,在Cpp Primer中,还介绍了另一种方法,使用比较函数。

我们可以知道,构造一个容器的比较器,通常有两种方法,一种是使用函数对象,另一种就是普通函数。

0 0