为什么分配给函数类型会产生错误?

时间:2018-11-25 21:50:40

标签: c++ function

我正在阅读this answer - about function name as pointer,作者在帖子中说为什么不编译它是未知的,这是我的问题,我想知道为什么。 (请不要惹恼作者,否则我会生气的,谢谢。)

那么如何为f分配内容呢?

这是直接从那里复制的代码:

typedef void (*pointer)(void);
typedef void (function)(void);

void foo(void){}

int main()
{
    pointer p;
    function f;

    p = foo; //compiles
    p();

    f = foo; //does not compile
    f();
}

错误消息是:

error: cannot convert ‘void()’ to ‘function {aka void()}’ in assignment

1 个答案:

答案 0 :(得分:2)

由于function被定义为函数类型,因此当您声明类型function的“变量”时,它实际上是声明一个函数,而不是变量。无法分配功能,因此这种行为很合理。