赋值期间指针衰减没有函数

No Function to Pointer Decay during Assignment

在下面给出的代码片段中,当我写 f = A; 然后 为什么 A 不衰减 到指向函数的指针?

//Func is alias for "pointer to a function that returns an int and does not take any parameter"
typedef int (*Func)();

int A(){
    return 1;
}
int main()
{
    Func* f = &A;//cannot convert ‘int (*)()’ to ‘int (**)()’ in initialization - I UNDERSTAND THIS ERROR
   
   
    f = A;//error: cannot convert ‘int()’ to ‘int (**)()’ in assignment - My QUESTION IS THAT IN THIS CASE WHY DOESN'T "A" decay to a pointer to a function and give the same error as the above 
    
}

我知道为什么 Func *f = &A; 会产生错误。但我预计 f = A; 会产生相同的错误,因为我认为在这种情况下 A 会衰减为指向函数的指针,因此应该产生与 Func*f = &A; 相同的错误。准确地说,我以为我会得到错误

error: cannot convert ‘int(*)()’ to ‘int (**)()’ in assignment

但令我惊讶的是,没有衰减,我也没有得到上述错误。

Why/How是这样吗?也就是为什么没有衰减。

why doesn't A decay to a pointer to a function?

错误信息说函数(int())不能隐式转换为指向函数指针(int (**)())的指针,因为表达式的类型(A) 是一个函数。

如果存在通过衰减类型到目标类型的有效转换序列,则该函数将衰减。但是没有这样的转换顺序,所以程序格式错误。