为什么我不能在类中使用参数化构造函数?
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 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
};
问题1:
为什么我不能在类的主体中使用相同的语法?
如何将3乘2矩阵定义为具有本征的data
的一个属性?
问题2:
我知道H1(0.0, 0.0, 1.0)
版本调用参数构造函数,但是,我不知道Vector3d H2 = {0.0, 0.0, 1.0};
行下会发生什么。那么实际上是什么呢?为什么它在第二种情况下有效?
对于Q1,默认成员初始值设定项(自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};
执行复制列表初始化(由于C++11(,其效果取决于Vector3d
的实现方式。(在这种情况下,它似乎与Vector3d H1(0.0, 0.0, 1.0)
相同,即调用适当的构造函数来初始化对象。(
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?