环境
Dev-C++ 5.11 C++14
使用using创建三种别名
using F=int(int*,int);
using PF=int(*)(int*,int);
using PF2=int*(int*,int);
据推测
F为返回int类型,形参列表为(int*,int)的函数类型
PF为返回int类型,形参列表为(int*,int)的函数指针类型
PF2为返回int*类型,形参列表为(int*,int)的函数类型
定义两个函数
int* bbb(int *a,int b)
{
cout<<"bbb"<
实验1:
PF pf1(int a)
{
cout<<"pf1"<
推测PF为返回int类型,形参列表为(int*,int)的函数指针类型,在pf1作为返回类型,pf1为直接定义,在pf2作为数据类型,表面了pf2是一个函数指针,指向函数aaa,且若指向bbb则报错,在pf3同样作为返回类型,分为声明和定义。
pf1、pf3皆为返回一个[返回int类型,形参列表为(int*,int)的函数指针]的,形参列表为(int)的函数~~(纯纯的套娃)~~
实验2:
PF pf001(int)
{
cout<<"pf001"<
我无法正确的创建一个指向PF返回值,形参列表(int)的函数指针~~(套娃失败)~~,也许需要使用括号获得更正确的结合顺序,总之创建一个指向[返回值为函数指针的函数]的函数指针是一件很不方便的事
实验3:
F f3(int a)
{
cout<<"f3"<
试图让f3返回一个函数,报错(错误在f3定义即发生,并没有到执行f3(10)
F* f4(int a)
{
cout<<"f4"<
手动修改返回值为指针类型,成功
实验4:
int* bbb(int *a,int b)
{
cout<<"bbb"<
pf2和pf22均报错
PF pf0;
PF2 pf20;
decltype(pf0) pf1(aaa);
decltype(pf20) pf21(aaa);//报错
PF不等价PF2
int* bbb(int *a,int b)
{
cout<<"bbb"<
PF2近似F,一个返回[返回值int的函数],一个返回[返回值int*的函数],可以添加一个*号返回函数指针
实在是太绕了,受不了受不了