经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
调用运算符与可调用对象
来源:cnblogs  作者:天官赐福  时间:2021/5/6 18:03:43  对本文有异议

1 调用运算符

  当用点运算符访问一个成员函数时,我们是想调用该函数。我们使用调用运算符( () )来调用一个函数。调用运算符是一对圆括号,里面放置实参列表(可能为空)。

item1.isbn()

2 可调用对象

  对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用对象(表达式)。可调用对象包含函数、函数指针、重载了函数调用符的类以及Lambda表达式四种。

2.1 函数

// 计算val的阶乘
int fact(int val)
{
    int ret = 1;
    while(val > 1)
        ret *= val--;
    return ret;
}

2.2 函数指针

// 函数:比较两个string对象的长度
bool lengthCompare(const string &, const string &);

// pf指向一个函数,该函数的参数是两个const string的引用,返回值是bool类型
bool (*pf) (const string &, const string &); // 未初始化

// 赋值
pf = lengthCompare;

 

2.3 重载了函数调用运算符的类

// struct含有一个调用运算符,该运算符负责返回其参数的绝对值
struct absInt()
{
    int operator() (int val) const
    {
        return val < 0 ? -val : val;
    }
}

 

2.4 Lambda表达式

[] (const string &a, const string &b)
    { return a.size() < b.size(); }

 3 谓词

  谓词是一个可调用的表达式,除此之外,其返回结果必须是一个能用作判断条件的值。标准库算法所使用的谓词分为两类:一元谓词(只接受单一参数)和二元谓词(有两个参数)。例如,我们常常使用sort算法对vector进行排序。而sort是重载过的,第二个版本接受第三个参数,该参数就是一个二元谓词。

bool isShorter(const string &s1, const string &s2)
{
    return s1.size() < s2.size();
}

// 谓词是一个返回值为bool的函数
sort(words.begin(), word.end(), isShorter);
// 谓词是一个返回值为bool的Lambda表达式
sort(words.begin(), word.end(), [] (const string &s1, const string &s2)  -> bool { return s1.size() < s2.size();} );

 

原文链接:http://www.cnblogs.com/tgcf/p/14688524.html

 友情链接:直通硅谷  点职佳  北美留学生论坛