指向任意数组的指针是否等于转换为void *之后且独立于编译器的指向数组第一个元素的指针?
我需要一个模板函数,该函数需要一个指向array[0]
的指针并提供对该数组的引用。下面的代码可以完成这项工作(至少在gcc和clang中),我想知道这是否是合法的C ++代码。
我的怀疑是由以下事实引起的:如果不将其强制转换为void *,则使用该模板的代码将无法编译(错误消息:“ static_cast from'int 'to'int()[ 10]'“”。
先谢谢了。这是代码:
template <std::size_t n, typename T>
inline T (& p2a( T * ptr))[n]
{
return *static_cast<T(*)[n]>( static_cast<void*>(ptr) );
}
答案 0 :(得分:0)
是的,数组的地址与数组的第一个元素的地址相同(即,在数组的开头没有填充),并强制转换为{{1} }不会更改地址,因此您的代码可以执行正确的操作。但是,将其编写如下更简单:
void*