因此,假设我有一个自定义 vector 类型:

template <class D, size_t N>
class Vector {
public:

    Vector(const D* arrayPtr)
    {
        memcpy(m_array.data(), arrayPtr, sizeof(D)*N);
    }

    ... operators, methods, etc ...

    std::array<D, N> m_array;
};
因此,我实例化了一个新的Vector<double, 4>指针。但是,有时我想将其视为Vector<double, 3>。执行以下操作安全吗?
Vector4* myVec4 = new Vector4(1, 2, 3, 4);
Vector3* myVec3 = reinterpret_cast<Vector3*>(myVec4);
我假设“也许”,因为该类在内存中是连续的,并且没有任何虚方法。但是,在采取任何冒险措施之前,我要非常确定。

最佳答案

不,那是不安全的,因为通过不兼容的指针访问对象将导致未定义的行为。
为了实现类似的目的,您可以改为使用诸如Vector3View之类的类来间接引用较大的 vector 。

关于c++ - 将reinterpret_cast视为较小的数组是否安全?有更好的选择吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64903225/

10-12 00:27
查看更多