字节(W)指针以sizeof(T)为增量的算术:未定义的行为?

时间:2017-04-10 23:21:03

标签: c++ pointers language-lawyer

对于char *类型的指针(指向int数组)以sizeof(int)为增量执行指针算法并稍后取消引用它是不确定的行为? 例如。考虑下面的代码。它会调用未定义的行为吗?

我认为行/*1*/应该是合法的,/*2*/肯定是合法的,但我不确定/*3*/

有一个prior question提出类似的问题,但没有接受答案。

int foo() {
  int arr[10] = {0};
  int i = 4;
  int s = sizeof(int);
  /*1*/ const char * cmem = reinterpret_cast<const char*>(&arr[0]);
  /*2*/ cmem += i * s;
  /*3*/ return *reinterpret_cast<const int*>(cmem);
}

1 个答案:

答案 0 :(得分:3)

这段代码没问题。允许在对象的边界内(或者在结束之后)进行指针运算,并且严格别名规则允许使用仅在const中与实际对象不同的左值来访问该对象。 / p>