为什么我不能在 class 中使用参数构造函数?
Why I can't use parametric constructor within a class?
我在我的代码中使用 Eigen 3.3.7 库。我可以在 main()
中创建一个向量并用数据填充,如下所示:
Vector3d H1(0.0, 0.0, 1.0);
Vector3d H2 = {0.0, 0.0, 1.0};
Matrix3d D(3,2); // Matrix is only initialised
但是,如果我在 class 中执行相同操作,我会收到语法错误:
class data {
Vector3d H1(0.0, 0.0, 1.0); //syntax error
Vector3d H = {0.0, 0.0, 1.0}; //still works
MatrixXd D(3,2); //syntax error
};
问题一:
为什么我不能在 class 的正文中使用相同的语法?
如何使用 Eigen 将 3×2 矩阵定义为 data
的属性?
问题二:
我知道 H1(0.0, 0.0, 1.0)
版本调用参数构造函数,但是,我不知道 Vector3d H2 = {0.0, 0.0, 1.0};
行下发生了什么。那么实际上呢?为什么它在第二种情况下有效?
对于 Q1,default member initializer (C++11 起)仅支持花括号初始化器和等号初始化器,但不支持括号初始化器。所以你可以
class data {
Vector3d H1{0.0, 0.0, 1.0};
Vector3d H2 = Vector3d(0.0, 0.0, 1.0); // or as you showed, Vector3d H2 = {0.0, 0.0, 1.0}
MatrixXd D1{3, 2};
MatrixXd D2 = MatrixXd(3, 2); // or MatrixXd D2 = {3,2};
};
对于 Q2,Vector3d H2 = {0.0, 0.0, 1.0};
执行 copy-list-initialization (C++11 起),其效果取决于 Vector3d
的实现方式。 (在这种情况下,它似乎与 Vector3d H1(0.0, 0.0, 1.0)
相同,即调用适当的构造函数来初始化对象。)
我在我的代码中使用 Eigen 3.3.7 库。我可以在 main()
中创建一个向量并用数据填充,如下所示:
Vector3d H1(0.0, 0.0, 1.0);
Vector3d H2 = {0.0, 0.0, 1.0};
Matrix3d D(3,2); // Matrix is only initialised
但是,如果我在 class 中执行相同操作,我会收到语法错误:
class data {
Vector3d H1(0.0, 0.0, 1.0); //syntax error
Vector3d H = {0.0, 0.0, 1.0}; //still works
MatrixXd D(3,2); //syntax error
};
问题一:
为什么我不能在 class 的正文中使用相同的语法?
如何使用 Eigen 将 3×2 矩阵定义为 data
的属性?
问题二:
我知道 H1(0.0, 0.0, 1.0)
版本调用参数构造函数,但是,我不知道 Vector3d H2 = {0.0, 0.0, 1.0};
行下发生了什么。那么实际上呢?为什么它在第二种情况下有效?
对于 Q1,default member initializer (C++11 起)仅支持花括号初始化器和等号初始化器,但不支持括号初始化器。所以你可以
class data {
Vector3d H1{0.0, 0.0, 1.0};
Vector3d H2 = Vector3d(0.0, 0.0, 1.0); // or as you showed, Vector3d H2 = {0.0, 0.0, 1.0}
MatrixXd D1{3, 2};
MatrixXd D2 = MatrixXd(3, 2); // or MatrixXd D2 = {3,2};
};
对于 Q2,Vector3d H2 = {0.0, 0.0, 1.0};
执行 copy-list-initialization (C++11 起),其效果取决于 Vector3d
的实现方式。 (在这种情况下,它似乎与 Vector3d H1(0.0, 0.0, 1.0)
相同,即调用适当的构造函数来初始化对象。)