我刚刚在C ++中发现了reinterpret_cast,我正在尝试更多地了解它。我写了这段代码:
const
效果非常好,完全符合预期。现在我想将struct Human{
string name;
char gender;
int age;
Human(string n, char g, int a) : name(n), gender(g), age(a) {}
};
int main()
{
Human h("John", 'M', 26);
char* s = reinterpret_cast<char*>(&h);
Human *hh = reinterpret_cast<Human*>(s);
cout << hh->name << " " << hh->gender << " " << hh->age << endl;
}
转换为char *
,然后从此字符串中取回std::string
对象:
Human
有没有人有想法克服这个问题?
谢谢。
答案 0 :(得分:1)
当你做第二个程序时
string str = s;
您创建一个与指针s
完全无关的全新对象。从str
获取地址将为您提供指向str
的指针,而不是它包含的“字符串”。
另外,使用reinterpret_cast
是一种告诉编译器“我知道我在做什么”的方法,如果你实际上并不知道发生了什么,那么你无疑会进入 undefined的领域。行为当您尝试使用str
指向的“字符串”初始化s
时会发生什么,因为它实际上不是字符串。