请问在C下面的代码定义的行为吗?
int main() {
const int i = 0;
return *(int*)(&i);
}
我问,因为6.5 / 7列出为一个有效的别名“与有效对象的类型兼容的类型的合格版本”。 但有效对象的类型是const int
,而且我不认为int
是一个合格的版本const int
(虽然正好相反)。 既不是int
和const int
兼容(6.7.3 / 10)。
此外,6.3.2.3/2说,你可以通过添加预选赛转换指针类型,以及所产生的指针相等。 6.3.2.3/7说,你可以将任意两个指针类型(所以剧组(int*)(&i)
本身是允许的)。 但并不是说所产生的指针指在同一个对象,甚至它是平等的。 所有它说的是,它可以转换回原来的类型(在这种情况下, const int*
)。 也就是说,即使别名是合法的,目前还不清楚,我认为标准的保证,我的指针转换确实导致引用指针i
。
因此,没有标准实际上定义我的代码的行为,如果是的话这哪里是定义?
我知道,代码工作实践中。 我心里有一个关于它不工作假设(和离奇)执行。 我问是否执行符合标准(如果没有违反,哪些部分),但我不希望如果有在我的想象中执行不符合其他方面把水搅浑。 如果有人认为这将帮助他们回答这个问题,我将描述实现。