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 @   翙翙其羽  阅读(500)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示