clang-tidy未对deltaX触发cppcoreguidelines-prefer-member-initializer提示
关于clang-tidy未触发
cppcoreguidelines-prefer-member-initializer提示的疑问 先看这段C++代码:
struct CosseratRodPrecomputation { CosseratRodPrecomputation(Scalar L0, const Vec3 &xA_, const Vec3 &xB_, const Vec3 &vA_, const Vec3 &vB_, const Mat3 &RA_, const Mat3 &RB_) : one_over_L0(1.0 / L0) , xA(xA_) , xB(xB_) , vA(vA_) , vB(vB_) , L(deltaX.norm()) , one_over_L(1.0 / L) , RA(RA_) , RB(RB_) { deltaX = xA-xB; } // ... 其他成员定义 };
这段代码存在明显错误:deltaX在构造函数体内才完成赋值,但初始化列表中的L却先依赖了deltaX.norm()——由于C++成员的初始化顺序是按照类中声明的顺序(而非初始化列表的书写顺序),这里L会在deltaX未初始化时就调用其成员函数,导致未定义行为。
现在遇到的问题是:当我把xA这类成员的初始化从初始化列表移到构造函数体内(比如改成xA = xA_)时,clang-tidy会触发cppcoreguidelines-prefer-member-initializer提示,要求我回到初始化列表完成初始化;但deltaX一直是在构造函数体内赋值,却从未触发这个提示。
想请教:这是clang-tidy的bug,还是我忽略了什么细节?
内容的提问来源于stack exchange,提问作者jjcasmar
相关产品推荐
相关产品推荐

