reinterpret_cast的目的是什么?

时间:2013-05-26 05:49:59

标签: c++

我是C ++的新手,并按如下方式阅读一些代码:

template<typename T>
std::istream & read(std::istream* stream, T& value){
    return stream->read(reinterpret_cast<char*>(&value), sizeof(T));
}

并称之为:

size_t size;
read(&stream, size);

任何人都可以解释这里使用的reinterpret_cast的目的是什么,以及调用read函数后的结果是什么?

更新:

问题是:

如果流包含一个字符串,例如“test”,则在调用read之后,value的类型变为char *并且其内容为“test”?

2 个答案:

答案 0 :(得分:2)

reinterpret_cast<T>()强制将给定的位模式解释为您想要的类型。这是演员阵容中最“野蛮”的。

来自MSDN

  

允许任何指针转换为任何其他指针类型。还允许将任何整数&gt;类型转换为任何指针类型,反之亦然。

     

滥用reinterpret_cast运算符很容易造成不安全。除非所需的&gt;转换本质上是低级别的,否则您应该使用其他一个转换运算符。   reinterpret_cast运算符可用于char*int*或&gt; One_class*Unrelated_class*之类的转换,这些转换本质上是不安全的。

     

reinterpret_cast的结果无法安全地用于除&gt;强制转换为原始类型之外的任何内容。其他用途充其量只是不可移植的。


在你的例子中

template<typename T>
std::istream & read(std::istream* stream, T& value){
    return stream->read(reinterpret_cast<char*>(&value), sizeof(T));
}

它用于从给定流中读取并将读取的数据转换为char*以将其视为字节序列(假设char默认为无符号)。

答案 1 :(得分:0)

read函数只是将一些字节读入缓冲区,reinterpret_cast这里通过覆盖值的实际类型将任意rvalue转换为这样的缓冲区。如果流实际上包含正确类型的值,则结果是该值存储在value中。