reinterpret_cast到C风格的数组是非法的C++ 11吗?

Gur*_*pof 3 c++ arrays casting reinterpret-cast

为什么以下代码不赞成?

double d[4] = {0,1,2,3};
reinterpret_cast<double[2]>(d);
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会宣布它invalid cast from type 'double*' to type 'double [2]'和铿锵声称reinterpret_cast from 'double *' to 'double [2]' is not allowed

现在万一意图不明显,我希望这段代码返回一个包含{0,1}的double [2],非常像一个reinterpret_cast<double*>(d)遗嘱.(因此我知道它可以使用指针,所以这不是我要求的)

Jar*_*d42 7

你可能想要的是什么

double (&d2)[2] = reinterpret_cast<double(&)[2]>(d);
Run Code Online (Sandbox Code Playgroud)

  • @GurgHackpof如果编译器说这可能是一个可怕的想法:) (3认同)

R. *_*des 4

两个编译器都是正确的。

reinterpret_cast不是锤子,它是一种强大的精密工具。的所有使用都reinterpret_cast必须涉及至少一个指针或引用类型作为源或目标,除了单位整型转换的退化情况(即允许reinterpret_castintint且不执行任何操作)。