是否可以像这样初始化一个类?

Quaternion::Quaternion(){ //default without arguments
    Quaternion(0.,V3(0.,0.,0.));
}


Quaternion::Quaternion(double s, V3 v){ //with scalar and vector as a argument
    coords[0] = s;
    coords[1] = v[0];
    coords[2] = v[1];
    coords[3] = v[2];
}

因为这是输出:
QUATERNION TEST
(2.122e-313:-3.22469e-232:2.122e-313:-1.998) //instanciated with Quaternion q;
(4:1:2:3) // instanciated with the Quaternion q(4,1,2,3);
(4:-1:-2:-3) // conjugated of the one above

第一个没有初始化为 0。它应该是......为什么?

最佳答案

不在 C++03 中,但最新版本的 C++ 允许委托(delegate)构造函数:

Quaternion() : Quaternion(0.0, V3(0.0,0.0,0.0)) { }

在委托(delegate)构造函数中,初始化列表必须恰好有一个元素,即另一个构造函数(显然不能有任何循环引用)。

如果您想直接在构造函数中实际初始化您的类成员,则在 C++11 之前,您并没有真正解决复制/粘贴问题。不过,也许您想使用默认参数?有些人反对那些......
explicit Quaternion(double s = 0.0, V3 v = V3(0.0,0.0,0.0)) { /* ... */ }

关于C++ 通过嵌套构造函数初始化类成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8759577/

10-11 20:31