相关疑难解决方法(0)

我可以将2D数组视为连续的1D数组吗?

请考虑以下代码:

int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
Run Code Online (Sandbox Code Playgroud)

第二行是否调用未定义的行为?第四行怎么样?

c++ arrays pointers multidimensional-array undefined-behavior

33
推荐指数
3
解决办法
6087
查看次数

`reinterpret_cast`是一个'T*`到'T(*)[N]`是不确定的行为?

请考虑以下情形:

std::array<int, 8> a;
auto p = reinterpret_cast<int(*)[8]>(a.data());
(*p)[0] = 42;
Run Code Online (Sandbox Code Playgroud)

这是未定义的行为吗?我觉得是这样的.

  • a.data()返回一个int*,不一样的int(*)[8]

  • cppreference上的类型别名规则似乎表明它无效reinterpret_cast

  • 作为程序员,我知道指向的内存位置a.data()是一个8 int对象数组

是否有任何我失踪的规则使这个reinterpret_cast有效?

c++ strict-aliasing language-lawyer reinterpret-cast c++17

25
推荐指数
2
解决办法
1298
查看次数