将指向数组第一个元素的指针强制转换为指向整个数组的指针是否合法?
template<typename T, size_t N>
void whatever(T(&)[N])
{
std::cout << N << '\n';
}
int main()
{
int a[10];
int * p = a;
whatever(*(int(*)[10])(p)); // <-- legal?
}
这段代码在我的编译器上输出的是10,但我不确定C++标准是否允许这样做。
whatever( *(double(*)[10])0 )
获得相同的输出,这与转换是否有意义完全无关。 - David Rodríguez - dribeas