在此c ++代码中,可以有人解释下一行在做什么,以前我没有看过这种表示法。

some_struct* args1 = (some_struct*)args2


一个简化的示例是:

struct some_struct
{
 myClass1* thisClass1;
};

void function1(void *args2)
{
some_struct* args1 = (some_struct*)args2;
//do some more stuff
}
int Main(int argc, char* argv)
{
mainClass1=myClass1::new()
some_struct args2;
args2.thisClass1=mainClass1;
function1((void *)&args2);
return 0;
}


原谅我的语法,我通常使用Python编程。

最佳答案

在函数中,变量args2是通用指针,这意味着它可以指向任何内容,但是您不能直接使用它,因为没有与void相关的类型信息。表达式(some_struct*)args2告诉编译器假装args2是指向some_struct的指针。

这种类型的表达式称为强制类型表达式,因为它可以将一种类型“转换”为另一种类型。语法是C样式的强制转换,它是从C语言的根源继承于C ++。

C样式转换的C ++特定等效项是reinterpret_cast,例如

some_struct* args1 = reinterpret_cast<some_struct*>(args2);

10-08 08:22