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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现