我正在将一部分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类型。

10-04 13:01