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。

浙公网安备 33010602011771号