是否有等效于Rust的NonNull :: dangling()指针实例化的C?

问题描述 投票:2回答:2

如果存在,则应满足以下属性:

  • 具有类型void *
  • 不需要实例化“虚拟对象”作为地址
  • 保证不等于NULL
  • 可以在不调用未定义行为的情况下构造
  • 与符合标准的编译器一起使用,而无需非标准扩展名

[起初我以为我可以做类似(NULL + 1)(void *)1的事情,但是这些似乎有问题。前者对NULL使用指针算法,我认为这是未定义的行为。第二个依赖于以下事实:NULL没有物理地址1。(即(void *)0 == (void *)1完全可能)

如果存在,则应满足以下属性:类型为void *不需要实例化“虚拟对象”作为地址,保证不比较等于...

c pointers void-pointers dangling-pointer
2个回答
2
投票
任何空指针都可以满足您的所有要求。

0
投票
NonNull::dangling()存在于Rust中,可以在给定NonNull实际值之前对其进行临时初始化。您不能将null用作临时对象,因为它是NonNull,并且会呈现未定义的行为。
© www.soinside.com 2019 - 2024. All rights reserved.