C++的函数进化小结
函数
有这样一个问题
1 |
|
那么很自然的给出解法
1 |
|
函数指针
这个时候的需要满足 统计大于10的数字 或者 统计小于35的数字,那么可以将*start > 20
这一段包装一下
1 |
|
图片上的代码有点小问题
在c语言中可以这样写,虽然编译会有警告,但是仍然可以生成。
1 |
|
在c中伴随着指针的引用*p
和解引用&p
,C对指针的类型安全性进行了更严格的限制。C++中的指针类型必须与所指向的对象类型匹配,不允许进行隐式类型转换。这可以帮助减少潜在的类型错误和编程错误。
函数模板
上面的函数只能支持int
,使用函数模板能让他支持更多类型
1 |
|
仿函数
在条件中如果需要处理用户传入的数字怎么办
仿函数(Functor)是C++中的一个概念,指的是可以像函数一样使用的对象。它实际上是一个类或结构体,重载了函数调用运算符 operator()
,使得对象可以像函数一样进行调用操作。
chatGPT给了我这样一个例子
1 |
|
在这里可以这样写
1 | template <typename T> |
explicit
:通过在单参数构造函数前添加explicit
关键字,可以防止编译器在需要进行类型转换的情况下自动调用该构造函数。operator
:仿函数的实现,使得对象可以像函数一样进行调用操作。
抓函数中生成一个对象(该标准仅在c++11及以上支持),但是这样函数指针就没法用了
1 | Greater<int> greater20{20}; |
可以学习标准库中的操作将模板持续下去
1 | template <typename T, typename fCompare> |
最后程序
1 |
|
lambda表达式
这个我再Qt上用的挺多的,他是匿名函数的实现
1 | int main(){ |