问题描述
6.3.2.1 C11标准中的左值,数组和函数指示符表示
可修改的左值是一个 没有数组类型,没有不完整的类型,没有const- 限定类型,并且如果是结构或联合,则没有任何成员(包括, 递归地,所有包含的集合或联合的任何成员或元素都应带有const- 合格的类型。
引号没有提到函数类型,但实际上,我认为函数类型的左值不是可修改的左值。 (数组类型的左值和函数类型的左值也有一些相似之处:都转换为数组和函数的地址。)
谢谢。
解决方法
函数类型的左值是否是可修改的左值?
该问题包含错误的用词。根据定义,左值仅指定一个对象。在您引用的段落(p1)的前面,它指定了
左值是可能指定对象的表达式(对象类型不是void);
对象的定义中不包含函数,因此没有函数类型的左值。
相反,函数类型有一个单独的类别。同样在6.3.2.1节中,第4段:
函数指示符是具有函数类型的表达式。除非它是
sizeof
运算符,_Alignof
运算符或一元&
运算符的操作数,否则类型为“函数返回类型”的函数指示符将转换为表达式类型为“函数返回类型的指针”的类型。
所以这个问题主要是有争议的。用左值指定事物的表达式不必关心函数类型。取而代之的是,如果适用,该表达式的规范将提及其如何与“功能指示符”一起使用
我认为函数类型的左值不是可修改的左值
正确,但这又是因为根本没有将其计入左值。