函数的类型
基本用法
在C++中,函数类型是指函数的签名,包括返回类型、参数类型以及参数的数量。函数类型可以用来声明函数指针、函数引用或者作为模板参数。
- 函数也可当成一种数据类型
-
函数指针 :
函数指针可以指向一个函数,其类型由返回类型、参数列表和const修饰符(如果有)决定。例如:
- funcPtr指向函数myFunction
cppint myFunction(int, double) int (*funcPtr)(int, double) = myFunction; // 指向返回int,接受int和double参数的函数
using
别名声明(Type Alias) :
using
可以用来为类型创建别名,使得类型名称更短或更易于理解。这对于模板类型特别有用。
cppusing MyInt = int; // 将MyInt作为int的别名 using Vec = std::vector<int>; // 将Vec作为std::vector<int>的别名
-
函数引用 :
函数引用必须被初始化为一个具体的函数,并且不能被重新赋值。函数引用的类型与它所引用的函数的类型相同。例如:
cppvoid (&funcRef)(int) = myFunction; // 引用返回void,接受int参数的函数
-
函数作为参数 :
可以将函数作为参数传递给另一个函数,此时需要指定函数的类型。例如:
cppvoid callFunction(void (*func)(int)) { func(10); }
-
std::function :
C++11引入了
std::function
,这是一个可以存储、调用和复制任何可调用对象(函数、lambda表达式、函数对象等)的类模板。例如:
cpp
#include <functional>
#include <iostream>
void greet() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
std::function<void()> func = greet;
func(); // 输出 "Hello, World!"
}
例子
using
cpp
#include<iostream>
using namespace std;
double ma(double a,double b){
return a+b;
}
int main(void){
double(* f)(double,double)=ma;
double(*f1[])(double,double){ma,ma};
cout<<f(1,3)<<endl;
cout<<f1[0](5,5)<<endl;
cout<<"********"<<endl;
//使用using别名
using m_type=double(*)(double,double);
m_type fun = ma;
m_type fun1[]{ma,ma};
cout<<fun(5,4)<<endl;
cout<<fun1[1](100,50)<<endl;
}
fucntion
cpp
#include <functional>
#include <iostream>
// 一个简单的函数
int add(int a, int b) {
return a + b;
}
int main() {
// 使用函数function,需用头文件 <functional>
std::function<int(int, int)> func = add;
std::cout << "10 + 5 = " << func(10, 5) << std::endl;
return 0;
}