C++中某些类型的指针之间的距离限制是什么?

sha*_*oth 5 c++ pointers

假设我有两个指向键入的指针T:

T* first = ...// whatever
T* second = ... //whatever else
Run Code Online (Sandbox Code Playgroud)

我可以确定这两个指针之间的距离永远不会超过:

((size_t)(-1))/sizeof(T)

Jam*_*lis 13

如果两个指针指向同一个数组中的元素,或者指向同一个数组的一个结尾,则只能计算两个指针之间的距离(从一个指针中减去一个指针).

如果两个指针符合该约束,则是,两个指针之间的差值的绝对值不能超过,((size_t)(-1)) / sizeof(T)因为size_t必须足够宽以表示任何对象的大小(以字节为单位).

如果两个指针不符合该约束,则根本不能保证.

  • 给定`T*p`,`p-p`的类型是`std :: ptrdiff_t`.C++标准明确指出指针减法操作可能会溢出,产生未定义的行为(C++ 11 5.7/6). (5认同)