static_cast <char*>和(char*)之间的区别

7 c++ file

这是我的第一个问题:)

我有一个桩文件,我打开它如下图所示;

ifstream in ( filename,  ios :: binary | ios :: in ) 
Run Code Online (Sandbox Code Playgroud)

然后,我希望在unsigned int hold中保存2字节数据;

unsigned int hold;
in . read(static_cast<char *>(&hold), 2); 
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是正确的.但是,当我用它编译它时

g++  -ansi -pedantic-errors -Werror - -Wall  -o main main.cpp 
Run Code Online (Sandbox Code Playgroud)

编译器发出错误

error: invalid static_cast from type ‘unsigned int*’ to type ‘char*’ 
Run Code Online (Sandbox Code Playgroud)

实际上,我通过使用(char*)更改static_cast来解决这个问题

unsigned int hold;
in . read((char*)(&hold), 2); 
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • static_cast<char*>和之间的区别是什么(char*)
  • 我不确定使用(char*)是否更安全.如果您有足够的知识,可以告诉我有关该主题的信息吗?

注意:如果您有更好的想法,请帮助我,以便我可以改进我的问题?

Alo*_*ave 11

static_cast比隐式C样式转换更安全.如果您尝试强制转换与另一个不兼容的实体,那么static_cast与隐式c样式转换不同,会给出编译时错误.

static_cast这里给你一个错误,因为你想说的是拿一个int并试着把它装进一个char,这是不可能的.int需要比char占用更多的内存,并且无法以安全的方式进行转换.

如果您仍然想要实现这一点,您可以使用reinterpret_cast,它允许您对两种完全不同的数据类型进行类型转换,但这并不安全.
您唯一的保证reinterpret_cast是,如果您将结果转换回原始类型,您将获得相同的值,但没有其他安全保证.