C2x,6.5.3.2 地址和间接运算符,约束,2:
一元 * 运算符的操作数应为指针类型。
为什么没有“操作数不能是指向的指针”的约束void
"?
虽然可以从以下推论:
C2x,6.5.3.2 地址和间接运算符,语义,4:
The 一元 * 运算符表示间接。如果操作数指向函数,则结果是函数指示符;如果它指向一个对象,结果是一个左值指定对象。
C2x,6.3.2.1 左值、数组和函数指示符,1:
An lvalue是一个表达式(带有除 void 之外的对象类型) 可能指定一个对象; ...
One possible(虽然有些人为,但我承认)添加“建议”约束会破坏代码的情况是&
and *
运算符被连接起来。在这种情况下,可以使用诸如a = &*p
, where p
is a void*
type, is允许。
From 本标准草案, 立即地按照您的第一个引文中的部分(粗体强调我的):
语义学
3 一元&
运算符产生其地址
操作数。如果操作数的类型为“type”,则结果的类型为
“指向类型的指针”。如果操作数是一元的结果*
运算符,既不是该运算符也不是&
运算符被评估结果就好像两者都被省略了,除了
对运营商的限制仍然适用结果不是
左值。 ……
目前我无法想到它的用例&*
组合(在void*
或任何其他指针类型) - 但它may发生在“自动生成”和/或使用条件宏扩展的代码中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)