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

问题描述 投票:0回答:1

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

可修改左值是不具有数组类型、不具有不完整类型、不具有 const 限定类型的左值,并且如果它是结构或联合,则不具有任何成员(递归地包括任何成员)所有包含的聚合或联合的成员或元素)具有 const 限定类型。

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

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

c function lvalue
1个回答
4
投票

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

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

左值是一个可能指定对象的表达式(具有除 void 之外的对象类型);

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

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

函数指示符是具有函数类型的表达式。除非它是

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

所以这个问题基本上没有实际意义。根据左值指定事物的表达式不必关心函数类型。相反,如果适用,表达式的规范将提及它如何使用“函数指示符”进行操作

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

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

© www.soinside.com 2019 - 2024. All rights reserved.