1 函数类型与函数指针类型
1.1 函数类型
int fun(int x) // 函数类型:int(int)
{
return x + 1;
}
using K = int(int);
K fun; // 函数声明,无法对这个函数进行定义,相当于int fun(int);
1.2 函数指针类型
作用:用于高阶函数
int inc(int x)
{
return x + 1;
}
using K = int(int);
int main()
{
K* fun = &inc; // fun指向inc这个对象,fun就是一个指针
std::cout << (*fun)(100) << '\n';
}
示例代码:
int inc(int x)
{
return x + 1;
}
using K = int(int);
int Twice(K* fun, int x)
{
int tmp = (*fun)(x);
return tmp * 2;
}
int main()
{
std::cout << Twice(&inc, 100) << '\n'; // 202
}
int main()
{
std::vector<int>a{1,2,3,4,5};
std::transform(a.begin(), a.end(), a.begin(), &inc);
for (auto n : a)
{
std::cout << n << '\n'; // 2,3,4,5,6
}
}
void fun(int)
{}
int main()
{
auto x = fun; // 函数指针类型,因为函数不能复制(数组也不能复制)
}
1.3 函数指针与重载
void fun(int)
{}
void fun(int, int)
{
}
int main()
{
// audo x = fun; // 错误
using K = void(int);
K* x = fun; // 此时只能显示指定类型
}
1.4 函数指针作为函数参数
int main()
{
std::vector<int>a{1,2,3,4,5};
std::transform(a.begin(), a.end(), a.begin(), &inc);
for (auto n : a)
{
std::cout << n << '\n'; // 2,3,4,5,6
}
}
1.5 函数指针作为函数返回值
int inc(int x)
{
return x + 1;
}
int dec(int x)
{
return x - 1;
}
auto fun(bool input)
{
if (intput)
return inc; //函数无法复制,直接返回的是函数指针
else
return dec;
}
int main()
{
std::cout << (*fun(true))(100) << '\n'; // 101
}