【发布时间】:2017-03-22 05:41:41
【问题描述】:
为什么是代码
void fcn(int *twoDArrayPtr, const int dim1, const int dim2) {
int (*array)[dim2] = reinterpret_cast<int (*)[dim2]>(twoDArrayPtr);
}
int main() {
return 0;
}
产生编译错误
error: cannot initialize a variable of type 'int (*)[dim2]' with
an rvalue of type 'int (*)[dim2]'
类型相同,所以我认为可以执行分配。由于int (*)[dim2] 是一个指向大小为dim2 的数组的指针,因此可能是一个指向一组大小为dim2 的数组的指针,这些数组位于可由指针索引的连续内存中,我认为这应该可以工作。
我在 Mac OS/X 上使用 clang++,版本信息如下:
Apple LLVM 版本 6.0 (clang-600.0.56) (基于 LLVM 3.5svn) 目标:x86_64-apple-darwin14.0.0 线程模型:posix
【问题讨论】:
-
这适用于带有 Gnu
g++的 Linux,但不适用于 Mac OS/X...是否有一些编译器指令会有所帮助? -
我不知道为什么你会得到那个特定的错误,但是数组的大小必须是一个常量表达式,
dim2不是。 (GCC 除外,它在某些情况下支持可变长度数组作为非标准扩展)。
标签: c++