Pav*_*kin 3 c void dereference language-lawyer
C2x,6.5.3.2 地址和间接运算符,约束,2:
一元 * 运算符的操作数应为指针类型。
为什么没有“操作数不能是指向的指针void”的约束?
虽然可以从以下推论:
C2x,6.5.3.2 地址和间接运算符,语义,4:
一元 * 运算符表示间接。如果操作数指向函数,则结果是函数指示符;如果它指向一个对象,则结果是指定该对象的左值。
C2x,6.3.2.1 左值、数组和函数指示符,1:
左值是一个可能指定对象的表达式(具有除 void 之外的对象类型);...
一种可能的情况(尽管有些人为,我承认)添加“建议”约束会破坏代码,那就是 and&运算*符连接的地方。在这种情况下,允许使用诸如 的表达式a = &*p,其中p是void*类型。
从这个标准草案中,紧接在您的第一个引用中的部分之后(粗体强调我的):
\n\n\n语义
\n
\n3 \xc2\xa0\xc2\xa0\xc2\xa0 一元运算符&产生其操作数的地址。如果操作数的类型为 \xe2\x80\x98\xe2\x80\x98type\xe2\x80\x99\xe2\x80\x99,则结果的类型为\n\xe2\x80\x98\xe2\x80\x98指针类型\xe2\x80\x99\xe2\x80\x99。如果操作数是一元*运算符的结果,则该运算符和该&运算符都不会被求值,并且结果就像两者都被省略一样,只不过运算符上的约束仍然适用并且结果不是左值。\xe2\x80\xa6
目前,我无法想到该&*组合的用例(在 avoid*或任何其他指针类型上) \xe2\x80\x93 但它可能出现在“自动生成”和/或使用条件的代码中宏扩展。
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |