在对this回答的评论中,我偶然发现了关于"有效指针"的含义的讨论。因为我认为这一般有趣:
什么是"有效指针"在C ++中?
特别是:
reinterpret_cast<const void*>(0x1)
是否为有效指针?
答案 0 :(得分:9)
标准将实施分为两大类:
你的表达式肯定不是一个安全派生的指针,所以它在第一个中是无效的。
引自3.7.4.3:
实现可能具有松散指针安全性,在这种情况下,指针值的有效性不取决于它是否是安全派生的指针值。或者,实现可能具有严格指针安全性,在这种情况下,引用具有动态存储持续时间但不是安全派生指针值的对象的指针值是无效指针值,除非引用完整对象之前已被宣布可达(20.7.4)。 [注意:使用无效指针值(包括将其传递给释放函数)的效果未定义,请参见3.7.4.2。即使不安全派生的指针值可能比较某些安全派生的指针值,也是如此。 - 结束注释]实现定义了实现是否已放宽或严格指针安全。
对于放松安全的实现,指针值的获取方式无关紧要,只需(3.9.2):
对象指针类型的有效值表示内存中的字节地址(1.7)或空指针。
0x1
是您系统上的有效内存地址吗?嗯,对于某些嵌入式系统来说。对于大多数使用虚拟内存的操作系统,从零开始的页面将保留为无效。