gpt4 book ai didi

通过嵌套构造函数对类成员进行 C++ 初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:26:44 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com