gpt4 book ai didi

c++ - 为什么函数被设计成指针?

转载 作者:行者123 更新时间:2023-11-30 18:28:53 24 4
gpt4 key购买 nike

在 C 中以及几乎所有 C++ 中,函数本质上都被视为指向函数的指针。

我想知道为什么这样设计?如果它只是一个函数类型,就像在像int这样的变量中,那不是很好吗?或任何其他原语?

typedef void(int) func_t
void foo(int);
void bar(int);
func_t fp = foo; // What's wrong with this?
fp = bar; // Acts like any other primitive

据我所知,函数像指针而不是基元只会使它们的模板变得 hell :P

顺便说一句,许多语言确实将函数视为函数。例如golang

func foo(int) {}
var fn func(int)
fn = foo

编辑被删除,因为它是在心情不好时写的。

EDIT2 函数在内存中的表示与它们在语言中的呈现方式无关。该语言旨在弥合硬件和逻辑之间的差距,因此,它将硬件内容包装成更容易掌握的概念。

例如,将数字作为地址非常容易出错且难以思考,C 提出了为其提供指针语义的解决方案。现在很明显,指针不应该能够相乘,并且与数字不同。指针实际上形成了一个affine space .

我提出了同样的论点,即函数指针实际上不应被视为指针,尽管它在内存中被表示为一个。

最佳答案

我会用另一个问题来回答你的问题:你如何将函数表示为值?

函数基本上就是一段代码,对吧?而且这段代码可以是可变长度的,对吗?那么,我们如何引用可变长度 block 呢?我们引用指向 block 开头的指针。

我确信其他答案会更详细,但这非常适合基本掌握其工作原理。

对于任何看起来函数是值类型的语言,我向您保证在内部表示中的某个位置有一个指针(或者它只是语法糖)。

关于c++ - 为什么函数被设计成指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905714/

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