我想知道reinterpret_cast在幕后是如何工作的。我正在从一本书中学习它,但我不理解。
例如,假设我有以下代码部分:
它会写入变量
int a = 255;
char *pChar = reinterpret_cast<char*>(&a);
或者
std::string str = "Hello";
char *pChar = reinterpret_cast<char*>(&str);
在这两个示例中,pChar将指向什么?为什么我尝试打印它们的内容时看不到任何东西?当然,reinterpret_cast是如何工作的?
编辑: 我知道reinterpret_cast使用起来非常危险,只想用它将一个内存块直接写入二进制文件中。我不明白的是,当我有一个
int a = 255; (00 00 00 FF in memory)
我希望将变量a
视为一系列字节,即char*:
char *pChar = reinterpret_cast<char*>(&a);
你好,我会翻译中文。以下是关于编程的内容:
pChar
指向变量a
(00 00 00 FF)的各个字节吗?
当我想要写入二进制文件时,pChar
所指向的内容会被写入吗?
a_file.write(reinterpret_cast<char*>(&a), sizeof(a));
它会写入变量
a
的各个字节,对吗?
char*
视为C风格的以null结尾的字节字符串。如果它实际上不是这样,那么你就不能像打印(或者其他处理)这样的字符串一样对待它。 - Some programmer dudereinterpret_cast<char*>(&a)
告诉编译器:“我们都知道&a
不是一个char*
,但让我们假装它是。” - Pete Beckerreinterpret_cast
。了解它是好的;然而,在您的代码中使用此转换的相对较少的地方会导致未定义的行为。 - Richard Critten