我正在将一部分FORTRAN 77代码转换为C++
DIMENSION ARRAY(513),JRRAY(2,513)
EQUIVALENCE (ARRAY(1),JRRAY(1,1))
这是隐式代码,其中以I,J,K,L,M,N,O,P开头的每个变量名称都被隐式地视为整数类型。因此,这里有一个名为ARRAY的 double 数组和一个名为JRRAY的整数数组。
等效语句将两个数组的起点指向相同的存储位置。但是,以某种方式,当调用ARRAY(I)时,字节被不同地解释为 double 字节,而当调用JRRAY(I,J)时,将字节解释为整数(至少我认为会发生这种情况)。
在C++中,是否有类似的方法可以将相同的内存位置解释为不同的类型?
或与FORTRAN中的等效功能相同但在C++中相同的功能。
最佳答案
类似的功能是union
:
union {
double array[513];
int jrray[513][2];
} equiv;
然后,您可以访问
equiv.array[i]
或equiv.jrray[i][j]
。但是请注意,访问工会的成员不同于上次写入的工会成员,这会导致C++中出现未定义的行为。参见Unions and type-punning。如果要将数据重新解释为其他数据类型,则应使用
reinterpret_cast<>
而不是punning类型。