函数类型(左值)可以转换为函数指针(右值)。
int func();
int (*func_ptr)() = func;
但从 (4.1/1)
非函数、非数组类型 T 的左值 (3.10) 可以转换
到一个右值。
这是否意味着函数上未完成左值到右值的转换?另外,当数组衰减为指针时,它不会返回一个作为指针的右值吗?
函数是左值。指向函数(数据类型)的指针可以是
任何一个;如果你给它一个名字,它就是一个左值;否则,它不是
(大致说来)。指向函数的指针遵循所有常见的左值
到右值转换规则。对于简单类型,例如基本类型或
指针,左值到右值的转换基本上意味着读取
多变的。
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();
与往常一样,转换的结果是一个右值(除非
转换为引用类型)。当数组
隐式转换为指针;数组和函数都只能
作为左值存在,but它们都隐式转换为指针,
这是一个右值。但该指针可用于初始化
适当指针类型的变量;这些变量是左值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)