C++ C++;如何修复旧代码中的void*算术

C++ C++;如何修复旧代码中的void*算术,c++,C++,我继承了一些旧代码,我正在维护这些代码,希望尽可能少地进行更改。它不使用较新的编译器编译 代码还有很多,但基本上,我认为(不管有多糟糕)的想法是将一个void*传递到任意记录大小的记录表的开头。我不想在这个函数之外进行更改,因为它会变得丑陋。我想我只是想对一个未签名的字符进行强制转换*然后进行加法,然后再强制转换回void*但是我很难找到正确的强制转换方式等等 有什么建议吗 以下是原始代码: foo(const void* recordArrayBasePtr ,ubin32 sizeOfStr

我继承了一些旧代码,我正在维护这些代码,希望尽可能少地进行更改。它不使用较新的编译器编译

代码还有很多,但基本上,我认为(不管有多糟糕)的想法是将一个void*传递到任意记录大小的记录表的开头。我不想在这个函数之外进行更改,因为它会变得丑陋。我想我只是想对一个未签名的字符进行强制转换*然后进行加法,然后再强制转换回void*但是我很难找到正确的强制转换方式等等

有什么建议吗

以下是原始代码:

foo(const void* recordArrayBasePtr ,ubin32 sizeOfStruct)
{
   void * recordPtr;
   int row = 9; //for example
   recordPtr = const_cast<void *>( recordArrayBasePtr ) + sizeOfStruct * row;
}
foo(const void*recordArrayBasePtr,ubin32 sizeOfStruct)
{
无效*记录PTR;
int row=9;//例如
recordPtr=const_cast(recordArrayBasePtr)+sizeOfStruct*行;
}

您想强制转换为
char*
,这是通过
重新解释强制转换来完成的,而不是通过
常量强制转换来完成的。但考虑到这实际上是C代码,您也可以使用C样式转换,这样编写起来就不那么麻烦了:

 recordPtr = (void*)((char*)recordArrayBasePtr + sizeofStruct * row);

recordPtr=静态类型转换(重新解释类型转换(RecordArrayBaseTr)+m\u haipeTableArray[tableId].sizeOfStruct*row)//这不会编译--错误:从类型“const void”到类型“char*”的重新解释constness@joemooney:你需要两个演员。但坦率地说,我会在这里使用C风格的演员阵容。在C++代码上放置漂亮的C++清漆没有任何意义。有没有可能把C++风格转换成C?编译将发出WANRING,我需要避免关于旧C样式强制转换的警告。@joemooney:
reinterpret_cast(const_cast(recordArrayBasePtr))+sizeOfStruct*row就像您在示例中所做的那样,并重新解释常量cast。但是,这还不够,因为函数的声明没有返回类型,并且函数末尾没有返回。这里肯定有什么缺失。为什么你要标注这个C++?这不是普通C吗?这是C++程序员编写的C++。来自@jon的解决方案成功了:重新解释了cast(const_cast(recordArrayBasePtr))+sizeOfStruct*row;