函数类型(左值)可以转换为函数指针(rvalue)。
int func();
int (*func_ptr)() = func;
但是从(4.1 / 1)
可以转换非功能非数组类型T的左值(3.10) 到了右边。
这是否意味着没有对函数进行左值转换的左值?此外,当一个数组衰减到指针时它不会返回一个rvalue,这是一个指针?
答案 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 适当指针类型的变量;这些变量是左值。