gpt4 book ai didi

C++ 将对象重新解释为字符串并返回

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:31 26 4
gpt4 key购买 nike

我刚刚在 C++ 中发现了 reinterpret_cast,我正在尝试了解更多相关信息。我写了这段代码:

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 对象:

int main()
{
Human h("John", 'M', 26);
char* s = reinterpret_cast<char*>(&h);

string str = s;
Human *hh = reinterpret_cast<Human*>(&str);

cout << hh->name << " " << hh->gender << " " << hh->age << endl; // prints wrong values
}

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

谢谢。

最佳答案

在你做的第二个程序中

string str = s;

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

此外,使用 reinterpret_cast 是一种告诉编译器“我知道我在做什么”的方法,如果您实际上不知道发生了什么,那么您无疑会进入 < em>未定义的行为 当您尝试使用 s 指向的“字符串”初始化 str 时会发生这种情况,因为它不是真正的字符串。

关于C++ 将对象重新解释为字符串并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com