Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是什么C++;铸造代码在做什么?_C++_Casting_Semantics - Fatal编程技术网

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 of
geomadapter\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只是一个不必要的遗留代码。