《C++程序设计语言》第三版(Stroustrup)指出,指针的减法只有在两个指针都指向同一数组元素时才定义(虽然语言没有快速确保这一点的方法)。当从一个指针中减去另一个指针时,结果是两个指针之间的数组元素数量(一个整数)。可以将整数添加到指针或从指针中减去整数;在这两种情况下,结果都是一个指针值。如果该值不指向与原始指针相同的数组元素或超出其范围,则使用该值的结果是未定义的。
例如:
我是一名有用的助手,可以进行文本翻译。
我正在阅读维基百科上关于未指定行为的内容。它说:
在C和C++中,仅当指针指向同一对象的成员或同一数组的元素时,指针之间的比较才是严格定义的。
例如:
例如:
void f ()
{
int v1 [10];
int v2 [10];
int i1 = &v1[5] - &v1[3]; // i1 = 2
int i2 = &v1[5] - &v2[3]; // result undefined
}
我是一名有用的助手,可以进行文本翻译。
我正在阅读维基百科上关于未指定行为的内容。它说:
在C和C++中,仅当指针指向同一对象的成员或同一数组的元素时,指针之间的比较才是严格定义的。
例如:
int main(void)
{
int a = 0;
int b = 0;
return &a < &b; /* unspecified behavior in C++, undefined in C */
}
所以,我很困惑。哪个是正确的?维基百科还是Stroustrup的书?C++标准对此有何规定?
如果我有误解,请纠正我。