C ++ reinterpret_cast对象为字符串和返回

时间:2016-02-27 16:21:52

标签: c++ string object casting reinterpret-cast

我刚刚在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

有没有人有想法克服这个问题?

谢谢。

1 个答案:

答案 0 :(得分:1)

当你做第二个程序时

string str = s;

您创建一个与指针s完全无关的全新对象。从str获取地址将为您提供指向str的指针,而不是它包含的“字符串”。

另外,使用reinterpret_cast是一种告诉编译器“我知道我在做什么”的方法,如果你实际上并不知道发生了什么,那么你无疑会进入 undefined的领域。行为当您尝试使用str指向的“字符串”初始化s时会发生什么,因为它实际上不是字符串。