将指向数组第一个元素的指针转换为指向整个数组的指针是否合法?
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++ 标准是否允许。
不,这是不合法的(因为它是未定义的行为)。指向整个数组的指针是&a
not p
。基本上,您将一个指针投射到另一个指针。该标准描述了所有允许的转换,但这一转换不在其中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)