Loading

decltype与函数指针,函数类型

昨天以为就剩下一点的内容了,以为会很快的看完,谁知道今天还是花了两个小时才理解。

片段1:

int fun1(int a, int b) {
    return 32;
}

int fun2(int, int) {
    return 68;
}

int fun2(int, int);
decltype(fun1) *name(const string &) {
    return fun1;
}

主要是 decltype 的问题,如果是

decltype(fun1(5,6))  name ; 
//等价于  int name;
 

这种类型的,那么name是fun1函数的返回值类型,也就是int 类型。

但是如果是片段1的类型,那么decltype(fun1) 返回的是函数类型。

例如

decltype(fun1) name;

所谓的函数类型就是为函数起了个别名。我可以使用 name(4,6) 来调用fun1。

那么如何需要返回函数指针类型呢?

decltype (fun1) *name;
name =fun1;
name(45,89);
//也可以
name=fun2;  

函数指针的灵活性是函数类型不能比拟的,但是要注意,指针指向的函数的参数类型必须是一直的,因为fun1与fun2都是两个int类型的,所以name既可以指向fun1,也可以指向fun2。


那么代码中的

decltype(fun1) *name(const string &) {
    return fun1;
}

是什么意思呢?

我认为这里的 name 是一个函数名称,返回值为 decltype(fun1)* ,也就是一个指向函数的指针。

name函数的参数是一个string引用,返回值是一个指向函数的指针,我们就return fun1就好了。这个程序本来的目的是根据形参 string& 来决定调用 fun1还是fun2。比如如果 string的长度大于4,我们就调用fun1,否则就调用fun2。

posted @ 2022-04-09 11:48  翙翙其羽  阅读(547)  评论(0)    收藏  举报