Mas*_*ler 6 c++ casting semantics
在此处找到:https://github.com/tpaviot/oce/blob/master/src/BRepAdaptor/BRepAdaptor_Curve.cxx
我想知道的是:
((GeomAdaptor_Curve*) (void*) &myCurve)->Load(C,First,Last);
myCurve已被定义为GeomAdaptor_Curve.所以看起来它正在将指针转换myCurve为a void*,然后将其转换为a GeomAdaptor_Curve*,然后取消引用它并调用Load它.有什么可能的原因可以做到这一点,而不是简单地打电话myCurve.Load?
请注意,该语句出现在const成员函数中.所以&myCurve实际上是这种类型GeomAdaptor_Curve const*.这似乎是一种难看且令人困惑的说法
const_cast<GeomAdaptor_Curve&>(myCurve).Load(C,First,Last);
Run Code Online (Sandbox Code Playgroud)
并且可能已经变得更加复杂,以便"避免"尝试使用C风格的转换来避免编译器警告const.