小记_函数指针别名与作为返回值使用_C++Primer6.7

环境

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*的函数],可以添加一个*号返回函数指针

===============================================================

实在是太绕了,受不了受不了

你可能感兴趣的:(C++,c++)