gpt4 book ai didi

C++ 类型转换 int 到 union

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:42 27 4
gpt4 key购买 nike

我正在将一部分现有代码从 C 移植到 C++。我只需要将文件移动到 .cc,生成并修复错误。现有的代码与此类似,

/* a.h */
typedef union foo_ {
int var;
}foo;

void fun(foo a)
{
printf("%d\n", a.var);
}


/* a.cc or a.c */
#include<stdio.h>
#include"a.h"

int main()
{
int a = 0x10;
foo x;
x = (foo)a; // Error when the file is .cc but works with .c
fun(x);
return 0;
}

将 main 函数中的 int 变量 'a' 转换为 'foo' 在 C 中工作正常,但在 C++ 中显示以下错误,

a.cc: In function int main():
a.cc:8:14: error: no matching function for call to foo_::foo_(int&)
a.cc:8:14: note: candidates are:
a.h:2:15: note: foo_::foo_()
a.h:2:15: note: candidate expects 0 arguments, 1 provided
a.h:2:15: note: foo_::foo_(const foo_&)
a.h:2:15: note: no known conversion for argument 1 from int to const foo_&

它建议构造函数调用。我尝试了 static_cast、reinterpret_cast,但他们没有解决这个问题。我无法修改 union 或函数定义。有什么方法可以使它像 C 一样工作吗?

最佳答案

在 C++ 中, union 也可以采用构造函数,因此您可以只为 int 提供一个构造函数:

union foo {
foo() = default;

foo(int i)
: var(i)
{ }

int var;
};

foo x; // default-constructs `var`
x = (foo)a; // copy-constructors foo from a temporary
// constructed using foo(int )

或者因为这些东西无论如何都是可见的:

x.var = a;

关于C++ 类型转换 int 到 union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250259/

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