glm::vec3 和 glm::mat4 是如何初始化的?

Vis*_*orZ 2 c++ constructor glm-math

这是关于了解 glm 来源。我想知道 glm 是否对它的类进行零初始化并尝试过。是的,glm::vec3并且glm::mat4被初始化,即使没有提供构造函数值。然后我想了解它是如何完成的并阅读glm::mat4模板的来源。

有这个部分:

...
enum ctor{null};

// Constructors
GLM_FUNC_DECL tmat4x4();
GLM_FUNC_DECL tmat4x4(tmat4x4 const & m);
GLM_FUNC_DECL explicit tmat4x4(ctor Null);
...
Run Code Online (Sandbox Code Playgroud)

我可以读到有一个(void)构造函数(ctor)但没有定义,所以没有{...}部分。并且有一个explicitctor0作为参数来自 type 的第一个元素enum ctor,当然它会获得索引值0

  • 构造函数定义在哪里?我怎样才能找到它们?
  • 那个显式的 Null ctor 是做什么用的?
  • glm::mat4我刚写时如何初始化为单位矩阵:glm::mat4 myMatrix;

编辑:浏览 GitHub 上更新的源文件mat4x4.hpp可以detail/type_mat4x4.hpp从中#includes获取type_mat4x4.inl 中的实现细节。在那里,ctor 行为变得可见。

Ser*_*gei 5

它不再默认初始化。在包含之前定义 GLM_FORCE_CTOR_INIT 以强制初始化。 https://github.com/g-truc/glm/issues/809

#define GLM_FORCE_CTOR_INIT
#include <glm/glm.hpp>
Run Code Online (Sandbox Code Playgroud)