c-函数类型的左值是否是可修改的左值



6.3.2.1 C11标准中的值、数组和函数指示符表示

可修改的左值是指没有数组类型,没有不完整的类型,没有常量-合格类型,如果是结构或联盟,则没有任何成员(包括,递归地,所有包含的聚合或并集的任何成员或元素(-合格类型。

函数类型的左值是否是可修改的左值?

这句话没有提到函数类型,但实际上,我认为函数类型的左值不是可修改的左值。(数组类型的lvalues和函数类型的lvvalues也有一些相似之处:两者都转换为数组和函数的地址。(

谢谢。

函数类型的左值是否是可修改的左值?

这个问题用词不当。根据定义,左值只指定一个对象。在你引用的段落(p1(的前面,它指定了

左值是一个可能指定对象的表达式(对象类型不是void(;

函数不计入对象的定义中,因此不存在函数类型的lvalue。

相反,函数类型有一个单独的类别。第6.3.2.1节第4段:

函数指示符是一个具有函数类型的表达式。除非是sizeof运算符、_Alignof运算符或一元&运算符的操作数,否则类型为"函数返回类型"的函数指示符将转换为类型为"指向函数返回类型"的表达式。

所以这个问题大多没有实际意义。用左值指定事物的表达式不必关心函数类型。相反,如果适用的话,表达式的规范将提到它如何与";函数指示符";

我认为函数类型的左值不是可修改的左值

正确,但这也是因为根本不计入lvalues。

相关内容

最新更新