【发布时间】:2011-06-07 04:14:45
【问题描述】:
我能否检查给定的指针是否指向数组中的对象,由其边界指定?
template <typename T>
bool points_within_array(T* p, T* begin, T* end)
{
return begin <= p && p < end;
}
如果p 指向数组边界之外,指针比较会调用未定义的行为吗?在这种情况下,我该如何解决问题?它适用于 void 指针吗?还是无法解决?
【问题讨论】:
-
您的比较有效,但并不能真正保证“结束”与数组有关 - 我认为您最好使用大小(请参阅下面的答案)。
-
@jweyrich?你为什么这么说?假设 OP 只使用定义明确的指针转换,程序中的每个指针都指向对齐良好的数据(或者它们是
null)。根据 C++ 标准,未对齐的数据基本上不存在。p保证对齐,除非调用站点存在未定义的行为。 -
@jalf:我撤回了我的评论。谢谢你的课。
-
@BeeBand:下面的任何人都没有考虑过,但这是正确的。
标签: c++ arrays pointers comparison