那些天我读了很多关于reinterpret_cast<>
以及应该如何使用它(并在大多数情况下避免使用它)。
虽然我明白使用reinterpret_cast<>
投射自,说unsigned char*
to char*
is 实施定义(因此非便携式)似乎没有其他办法有效率的将一种转换为另一种。
假设我使用一个处理的库unsigned char*
来处理一些计算。在内部,我已经使用了char*
存储我的数据(我无法更改它,因为如果我这样做,它会杀死小狗)。
我会做类似的事情:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
// We use it here
// processData() takes a unsigned char*
void processData(reinterpret_cast<unsigned char*>(mydata), mydatalen);
// I could have done this:
void processData((unsigned char*)mydata, mydatalen);
// But it would have resulted in a similar call I guess ?
如果我希望我的代码具有高度可移植性,那么除了首先复制数据之外,我似乎别无选择。就像是:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
unsigned char* mydata_copy = new unsigned char[mydatalen];
for (size_t i = 0; i < mydatalen; ++i)
mydata_copy[i] = static_cast<unsigned char>(mydata[i]);
void processData(mydata_copy, mydatalen);
当然,这是非常次优的,我什至不确定它是否比第一个解决方案更便携。
所以问题是,在这种情况下你会怎么做才能拥有高度可移植的代码?