将具有数据类型的变量传递给函数如何合法?

问题描述 投票:0回答:1

我目前正在检查 DLL 到一种非常特殊的测量设备,该设备称为“测力板”,由 Advanced Mechanical Technology, Inc. 生产。它测量人体站立或移动时产生的地面反作用力。这个 DLL 是用 Visual C++ 编写的(如程序员参考所说)并由测力台制造商提供。

所以,有一个函数叫做

fmDLLTransferFloatData
。在 DLL 的头文件中是这样声明的:

int DLLExport fmDLLTransferFloatData(float *&data);

它返回一个

int
并需要引用一个指向
float
数据的指针。到目前为止,一切都很好。这是这个函数的奇怪部分,根据程序员参考,它必须在代码中使用的方式:

float *ptr;
int ret;

//getting the Data
ret = fmDLLTransferFloatData((float *&)ptr);

看看参数语法:

((float *&)ptr)
。它有效。有人能解释一下这个句法到底是什么意思吗?

所以,正如我已经说过的,这个函数工作正常,如果有人向我解释这个奇怪的语法,我实际上会非常高兴。

c++ pointers types reference arguments
1个回答
0
投票

它对您显示的上下文完全没有任何作用。如果

ptr
float*
类型的变量,那么表达式
ptr
(float *&)ptr
是 100% 完全等价的。

所以你可以只写

ptr

事实上,使用 C 风格的转换

(float *&)
是一种不好的做法,因为它很容易导致严重的问题被忽视。无论
ptr
是什么类型,转换几乎总是会成功,但如果它实际上不是
float*
,那么它几乎肯定会导致未定义的行为。然而,编译器不会将此诊断为错误或警告,因为显式强制转换本质上告诉编译器只做它而不会抱怨,无论它有多危险。

© www.soinside.com 2019 - 2024. All rights reserved.