赋值期间指针衰减没有函数
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
) 是一个函数。
如果存在通过衰减类型到目标类型的有效转换序列,则该函数将衰减。但是没有这样的转换顺序,所以程序格式错误。
在下面给出的代码片段中,当我写 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
) 是一个函数。
如果存在通过衰减类型到目标类型的有效转换序列,则该函数将衰减。但是没有这样的转换顺序,所以程序格式错误。