在这里找到:https://github.com/tpaviot/oce/blob/master/src/BRepAdaptor/BRepAdaptor_Curve.cxx
我想知道的那一行是:((GeomAdaptor_Curve*) (void*) &myCurve)->Load(C,First,Last);
myCurve
已经定义为GeomAdaptor_Curve
。因此,看起来好像将指向myCurve
的指针转换为void*
,然后将其转换为GeomAdaptor_Curve*
,然后取消引用并在其上调用Load
。这样做可能是什么原因,而不是简单地调用myCurve.Load
?
最佳答案
请注意,该语句出现在const
成员函数中。因此,&myCurve
的类型实际上是GeomAdaptor_Curve const*
。这似乎是一个丑陋而令人困惑的说法
const_cast<GeomAdaptor_Curve&>(myCurve).Load(C,First,Last);
并可能会变得更加复杂,以便“避免”编译器警告,这是您尝试使用C样式强制转换来绕过
const
时得到的。关于c++ - 这个C++强制转换代码在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25417045/