如何在构造函数中正确初始化XMVECTOR
How do I correctly initialize an XMVECTOR in a constructor?
我很难找到关于在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的默认构造函数做什么,你可以在调试模式下运行你的程序,并在观察窗口中查看。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 如何在 DirectX 中初始化 XMVECTOR?
- 如何在构造函数中正确初始化XMVECTOR