gpt4 book ai didi

c++ - 在 C++ 中如何检查指针是否在一个范围内?

转载 作者:行者123 更新时间:2023-12-03 06:55:51 24 4
gpt4 key购买 nike

直观地检查 whecker 指针 p 在于 [ a , b ) 就可以了

a<=p && p<b
然而,比较来自两个数组的指针会导致未指定的行为,因此我们不能安全地说 p 在此比较中位于 [ a , b ) 中。
有什么办法可以确定地检查这一点吗?
(如果可以为 std::vector<T>::const_iterator 做就更好了,但我认为这是不可行的。)

最佳答案

这是部分解决方案。您可以利用比较会调用未指定行为的事实,以及核心常量表达式无法执行此操作的事实:

template<typename T>
constexpr bool check(T *p, T *a, T *b)
{
return a <= p and p < b;
}
现在这个函数可以这样使用:
int main()
{
int arr[5];
int arr_2[5];
constexpr bool b1 = check(arr + 1, arr, arr + 3); // ok
constexpr bool b2 = check(arr_2 + 1, arr, arr + 3); // error
}
这是一个 demo
这显然只有在编译时已知指针值时才有效。在运行时,没有进行此检查的有效方法。

关于c++ - 在 C++ 中如何检查指针是否在一个范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64042325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com