如何在构造函数中正确初始化XMVECTOR

How do I correctly initialize an XMVECTOR in a constructor?

本文关键字:初始化 XMVECTOR 构造函数      更新时间:2023-10-16

我很难找到关于在XMVECTOR上调用默认构造函数时会发生什么的可靠文档。

MSDN表示XMMIX默认构造函数不会将变量初始化为0(http://msdn.microsoft.com/en-us/library/windows/desktop/ee420023(v=vs.85).aspx)。所以我的直觉是XMVECTOR也是如此,但不幸的是,我在MSDN网站上找不到这一确认。

回到最初的问题:

// Trackball.h
class Trackball
{
    ...
    XMVECTOR m_eye;
    XMVECTOR m_position;
    XMVECTOR m_up;
    XMVECTOR m_rotateStart;
    XMVECTOR m_rotateEnd;
    ...
}
// Trackball.cpp
Trackball::Trackball(void) :
    ...
    m_eye(),
    m_rotateStart(),
    m_rotateEnd(),
    m_zoomStart(),
    m_zoomEnd(),
    m_panStart(),
    m_panEnd(),
    ...
{
}

但这只是使用默认构造函数来初始化变量,对吗?因此,如果默认构造函数不初始化XMVECTOR成员的上述假设成立,那么我应该改为这样做吗?:

// Trackball.cpp
Trackball::Trackball(void) :
    ...
    m_eye(XMVectorZero()),
    m_rotateStart(XMVectorZero()),
    m_rotateEnd(XMVectorZero()),
    m_zoomStart(XMVectorZero()),
    m_zoomEnd(XMVectorZero()),
    m_panStart(XMVectorZero()),
    m_panEnd(XMVectorZero()),
    ...
{
}

这看起来很难看,但可能是对的。

感谢您的阅读和帮助。

我认为你的方法是正确的,如果你认为它很难看,你可以把它放在构造函数体中,尽管它会失去一些性能,因为初始化列表只调用复制构造函数。如果你想看看XMVECTOR的默认构造函数做什么,你可以在调试模式下运行你的程序,并在观察窗口中查看。