澄清指向函数转换的指针

时间:2011-12-20 10:07:46

标签: c++ function-pointers

函数类型(左值)可以转换为函数指针(rvalue)。

int func();
int (*func_ptr)() = func;

但是从(4.1 / 1)

  

可以转换非功能非数组类型T的左值(3.10)   到了右边。

这是否意味着没有对函数进行左值转换的左值?此外,当一个数组衰减到指针时它不会返回一个rvalue,这是一个指针?

1 个答案:

答案 0 :(得分:3)

函数是左值。指向函数(数据类型)的指针可以是 要么;如果你给它一个名字,它就是一个左值;否则,它不是 (粗略地说)。函数指针遵循所有通常的左值 价值转换规则。对于简单类型,如基本类型或 指针,左值转换的左值基本上意味着读取 变量

void func();            //  Declares func
(*(&func))();           //  The expression &func is an rvalue
void (*pf)() = &func;   //  pf is an lvalue
(*pf)();                //  In the expression *pf, pf undergoes an
                        //  lvalue to rvalue conversion

请注意,函数隐式转换为指针 函数,()运算符同时适用于函数和 指向函数的指针,因此可以写出最后两行:

void (*pf)() = func;
pf();

与往常一样,转换的结果是一个右值(除非 转换是参考类型)。当阵列时也是如此 被隐式转换为指针;数组和函数都只能 作为左值存在,它们都隐式转换为指针, 这是一个右值。但是该指针可用于初始化a 适当指针类型的变量;这些变量是左值。