我想知道是否有必要在下面的函数中重新解释.ITER_T可能是char*,unsigned char*,std :: vector <unsigned char> iterator,或类似的东西.到目前为止它似乎没有受到伤害,但是铸造是否会影响字节的复制方式?
template<class ITER_T>
char *copy_binary(
unsigned char length,
const ITER_T& begin)
{
// alloc_storage() returns a char*
unsigned char* stg = reinterpret_cast<unsigned char*>(alloc_storage(length));
std::copy(begin, begin + length, stg);
return reinterpret_cast<char*>(stg);
}
Run Code Online (Sandbox Code Playgroud)
reinterpret_casts用于低级实现定义的强制转换.根据标准,reinterpret_casts可用于以下转换(C++ 03 5.2.10):
reinterpret_cast.也就是说,reinterpret_cast在你的情况下使用它不是一个好的解决方案,因为标准没有指定转换为不同的类型,尽管从大多数机器上的char *to unsigned char *和back转换应该可以工作.
在你的情况下,我会考虑static_cast通过定义stg类型来使用或不使用char *:
template<class ITER_T>
char *copy_binary(
unsigned char length,
const ITER_T& begin)
{
// alloc_storage() returns a char*
char* stg = alloc_storage(length);
std::copy(begin, begin + length, stg);
return stg;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3921 次 |
| 最近记录: |