这是我的第一个问题:)
我有一个桩文件,我打开它如下图所示;
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是,如果您将结果转换回原始类型,您将获得相同的值,但没有其他安全保证.