gpt4 book ai didi

c - 用 C 写一个仿函数

转载 作者:行者123 更新时间:2023-12-02 09:23:37 24 4
gpt4 key购买 nike

我想在 C 中做这样的事情:

typedef int (*func)(int);

func make_adder(int a) {
int add(int x) {
return a + x;
}
return &add;
}

int main() {
func add_42 = make_adder(42);
// add_42(10) == 52
}

但这行不通。可行吗?我的错误在哪里?

最佳答案

不,这是不可能的,因为在内存中没有任何地方可以以 &add 引用它的方式存储 int aint a存在于make_adder的函数栈中,不存在,所以&add不能引用原来的。制作 int a 的副本是不可能的,因为该副本的生命周期需要与 &add 的生命周期相关联,而 C 没有必要的垃圾收集机制.

因此,总而言之,我们既不能保存原始堆栈变量a,也不能在堆上进行复制。

关于c - 用 C 写一个仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39774515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com