gpt4 book ai didi

c++ - 为什么指针减法在 C++ 中是未定义的行为?

转载 作者:太空狗 更新时间:2023-10-29 19:40:12 27 4
gpt4 key购买 nike

对于下面的示例,什么可能导致未定义的行为?以及为什么?

#include <cstddef> 
#include <iostream>

template <typename Ty>
bool in_range(const Ty *test, const Ty *r, size_t n)
{
return 0 < (test - r) && (test - r) < (std::ptrdiff_t)n;
}

void f() {
double foo[10];
double *x = &foo[0];
double bar;
std::cout << std::boolalpha << in_range(&bar, x, 10);
}

我没有在When is pointer subtraction undefined in C?中找到答案

最佳答案

指针算术,包括两个指针的减法,仅在指针指向同一数组内的元素或指向该数组末尾的元素时才定义。在此上下文中,标量算作大小为 1 的数组。

在任何其他实例中允许指针运算是毫无意义的。这样做会不必要地限制 C 的内存模型,并可能削弱其灵 active 和移植到异国情调架构的能力。

关于c++ - 为什么指针减法在 C++ 中是未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891629/

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