【发布时间】:2020-09-24 08:22:20
【问题描述】:
直观地检查 whecker 指针 p 位于 [a,b) 就可以了
a<=p && p<b
但是,比较两个数组中的指针会导致未指定的行为,因此我们不能安全地说 p 在此比较中的 [a,b) 中。
有什么方法可以确定地检查这一点吗?
(如果可以为std::vector<T>::const_iterator做就更好了,但我觉得不可行。)
【问题讨论】:
-
将指针重新解释为
uintptr_t并使用它来比较地址,请参阅 devblogs.microsoft.com/oldnewthing/20170927-00/?p=97095 以获得更深入的信息 -
你想达到什么目的?为什么要检查指针的范围?你为什么要使用原始指针?
-
“在一个范围内”是什么意思?指向与
a和b指向相同数组的元素? -
没有“语言律师”的方式来做到这一点。 C++ 运行在此处建议的每种方法都将失败的系统上。 在特定平台上,您可能会成功地转换为 @UnholySheep 建议的整数。
-
注意:其中一个检查复杂的系统是 x86 实模式,其中指针使用分段寻址。注意:对于任何使用虚拟地址转换的系统来说,它也很复杂(阅读:从用户模式来看几乎不可能)
标签: c++ pointers language-lawyer