You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中无类型转换实现返回自身指针的函数?

在C++里不用类型转换实现函数返回自身指针

问题场景

C语言里可以靠类型转换让函数返回自己的指针,代码是这样的:

typedef void (*voidfunc)();

voidfunc f(int) {
    return (voidfunc) f;
}

但这种写法依赖强制类型转换,现在要在C++里实现不用类型转换的版本,就是补全下面代码里的???:

??? f(int) {
    return f;
}

试了直接用auto不行:

auto f(int) {
    return f;
}

模板的路子也走不通。

可行方案

方案1:先定义匹配的函数指针类型

先给和f签名完全一致的函数指针整个类型别名,C++允许这种递归的指针类型定义,直接拿这个别名当返回值就行:

using FuncPtr = FuncPtr(*)(int);

FuncPtr f(int) {
    return f;
}

方案2:用尾返回类型+decltype

要是不想提前定义类型别名,就用尾返回类型配合decltype,让编译器自己推导返回的函数指针类型,完全不用手动转:

auto f(int) -> decltype(f) {
    return f;
}

或者写成带取地址的形式,效果一样:

auto f(int) -> decltype(f)* {
    return &f;
}

为啥直接用auto不行?

单独写auto当返回值时,编译器得先推导返回类型,但return f里的f就是函数本身,这时候函数的返回类型还没确定,形成了循环依赖,编译器没法完成推导,自然就编译失败了。

内容的提问来源于stack exchange,提问作者6502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:31:05