C++ 这是什么C++;铸造代码在做什么?
可在此处找到: 我想知道的是:C++ 这是什么C++;铸造代码在做什么?,c++,casting,semantics,C++,Casting,Semantics,可在此处找到: 我想知道的是: ((曲线*)(无效*)&myCurve)->荷载(C,第一个,最后一个) myCurve已定义为geome\u曲线。因此,它看起来像是将指向myCurve的指针转换为void*,然后将其转换为geomadapter\u曲线*,然后对其取消引用并调用Load。这样做有什么可能的原因,而不是简单地调用myCurve.Load?我能想到的唯一原因是确保“subclass ofgeomadapter\u Curve”类型的变量被强制调用超类的Load函数 转换为void*
((曲线*)(无效*)&myCurve)->荷载(C,第一个,最后一个)代码>
myCurve
已定义为geome\u曲线
。因此,它看起来像是将指向myCurve
的指针转换为void*
,然后将其转换为geomadapter\u曲线*
,然后对其取消引用并调用Load
。这样做有什么可能的原因,而不是简单地调用myCurve.Load
?我能想到的唯一原因是确保“subclass ofgeomadapter\u Curve
”类型的变量被强制调用超类的Load
函数
转换为void*
,然后转换为geomadapter\u Curve*
,将保证该类型被视为后者,无论其实际类型如何
在查看了代码之后,我看不出这在哪里是可能的,所以很可能是遗留代码,或者是他们为将来的扩展而加入的东西
可能值得联系GitHub上的dbarbier
用户,因为他们似乎对更改负有唯一责任(基于历史记录)
尽管,由于这段代码似乎是最早的GitHub版本,如果您能找到它们,那么原作者可能是更好的选择(请参阅一个Remi LEQUETTE的文件头)。注意,语句出现在const
成员函数中。所以&myCurve
的类型实际上是geomadapter\u Curve const*
。这似乎是一种丑陋而令人困惑的说法
const_cast<GeomAdaptor_Curve&>(myCurve).Load(C,First,Last);
const_cast(myCurve)。加载(C,第一个,最后一个);
为了“避免”编译器警告,您可能会因为尝试使用C样式转换来绕过const
遗留代码而变得更加复杂,很可能以前的代码可能是另一种类型,需要转换为GeomAdaptor\u Curve
,但双转换确实很奇怪,如果有指针运算的地方,就不会那么奇怪了。这真的很奇怪。现在似乎没有任何理由。同一类中的其他方法直接调用myCurve.Load()
。我检查了repo,正如OP所说myCurve
已经是Geomer\u曲线的类型了。不是子类也不是超类。我更倾向于认为这个cast只是一个不必要的遗留代码。