在C中实现OOP与在C++中实现OOP [重复]

2ic8powd  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(131)
    • 此问题在此处已有答案**:

Does Function pointer make the program slow?(8个答案)
20小时前关门了。
在C++中你可以有方法/类函数,但在C中这是不可能的。然而,对于一些人来说,在C中使用构造函数,然后在结构中为函数指针分配函数地址是很常见的。例如:

#include <stdio.h>

void func_wave()
{
    printf("Wave\n");
}

void func_handshake()
{
    printf("Handshake\n");
}

typedef struct {

    void (*wave)();
    void (*handshake)();

}Greet;

Greet initGreet()
{
    Greet var = {.wave = func_wave, .handshake = func_handshake};
    return var;
}

int main()
{
    Greet greet_instance = initGreet();
    greet_instance.wave();
    greet_instance.handshake();

    return 0;
}

对我来说,这类似于C++ OOP,除了它需要一些额外的工作。
我的问题是:这比使用方法/成员函数慢吗?

kpbpu008

kpbpu0081#

这比使用方法/成员函数慢吗?
这取决于你的使用情况。你浪费了函数指针的存储空间,但是通常它很慢。
函数指针占用多少空间?
这取决于机器的字长。使用sizeof()运算符为您的机器查找。
例如,它是否像int指针一样,有一个固定的大小来存储地址?
请参见this answer
如果它确实是这样工作的,这是否意味着函数指针的大小都是相同的,或者它取决于函数的返回类型?
函数指针的大小相同,但根据标准不能等于void *。函数指针的类型取决于返回类型,而不是其大小。

相关问题