gpt4 book ai didi

c++ - 将指向结构的 void 指针或 memcpy 转换为新结构?

转载 作者:行者123 更新时间:2023-11-28 00:32:08 25 4
gpt4 key购买 nike

我将 void * 作为参数传递给调用函数 bar(STmyStruct* parm) 的函数 foo(void* parm) >我应该将 void 指针转换为 STmyStruct* 还是创建一个新结构,memcpy void* 指向的内容,然后将指针传递给该结构?我想解决方案 A 更有效?

A:    foo(void* parm)
{
bar((STmyStruct*) parm)
}

B: foo(void* parm)
{
STmyStruct myStr;
memcpy(&myStr, parm, sizeof(STmyStruct));
bar(&myStr)
}


bar(STmyStruct* mystr);

最佳答案

  • 如果您可以完全避免处理void*,那就去做吧。但是您可能受现有 API 的约束。
  • 如果 void* 实际上指向一个 STmyStruct*,就转换。
  • 如果 void* 不指向 STmyStruct* 而是布局兼容的东西(因此 cross-memcpy 是合法的),这应该是非常罕见的情况下,那么由于别名规则,您必须选择选项 B,否则可能会混淆编译器。

关于c++ - 将指向结构的 void 指针或 memcpy 转换为新结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477463/

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