Joh*_*bas 2 c++ eigen list-initialization
使用 gcc 9.4.0 和 Eigen 3.3.7,以下编译没有问题:
\n#include <Eigen/Dense>\n\nint main(int Argc, char *Argv[]) {\n Eigen::Matrix<int, 1, 4> d = {1, 2, 3, 4};\n}\nRun Code Online (Sandbox Code Playgroud)\n将长度增加 1 会引发错误:
\n#include <Eigen/Dense>\n\nint main(int Argc, char *Argv[]) {\n Eigen::Matrix<int, 1, 5> d = {1, 2, 3, 4, 5};\n }\n\nfoo.cpp:6:48: error: could not convert \xe2\x80\x98{1, 2, 3, 4, 5}\xe2\x80\x99 from \xe2\x80\x98<brace-enclosed initializer list>\xe2\x80\x99 to \xe2\x80\x98Eigen::Matrix<int, 1, 5>\xe2\x80\x99\n 6 | Eigen::Matrix<int, 1, 5> d = {1, 2, 3, 4, 5};\n | ^\n | |\n | <brace-enclosed initializer list>\nRun Code Online (Sandbox Code Playgroud)\n第二种情况是 Eigen 教程页面中一行的副本。
\n有人可以解释一下第二种情况的问题吗?
\n更新:根据下面的评论,这似乎是 Eigen 库中的一个错误。我已经提交了错误报告。
\n更新更新:根据下面的答案,Eigen 3.3 特别允许大括号初始化程序最多 4 个参数,而 Eigen 3.4 允许一般大括号初始化。Mint 发行版是 3.3(3.4 发布一年后!),而 Eigen 文档现在指的是 3.4 版本。
\nEigen 3.3.x 不支持大括号初始化。如果你写
Eigen::Matrix<int, 1, 4> d = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
它将调用Eigen::Matrix(S const& x, S const& y, S const& z, S const& w)构造函数 link。Eigen 具有最多 4 个元素的构造函数,仅适用于在编译时具有正确元素数量的类向量矩阵。
如果启用了 C++11 或更高版本,初始化程序列表可与 Eigen 3.4.x 配合使用:链接。