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

问题描述

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

修改的左值是一个 没有数组类型,没有不完整的类型,没有const- 限定类型,并且如果是结构或联合,则没有任何成员(包括, 递归地,所有包含的集合或联合的任何成员或元素都应带有const- 合格的类型。

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

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

谢谢。

解决方法

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

该问题包含错误的用词。根据定义,左值仅指定一个对象。在您引用的段落(p1)的前面,它指定了

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

对象的定义中不包含函数,因此没有函数类型的左值。

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

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

所以这个问题主要是有争议的。用左值指定事物的表达式不必关心函数类型。取而代之的是,如果适用,该表达式的规范将提及其如何与“功能指示符”一起使用

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

正确,但这又是因为根本没有将其计入左值。