C++;将int类型转换为union 我将一个现有代码的一部分从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; }
它建议构造函数调用。我试过静态施法,重新解释施法,但他们没有解决这个问题。我无法修改union或函数定义。有什么方法能使这个工作类似于C?< /p> 。你可以在C++中聚合构建一个大部分时间:C++;将int类型转换为union 我将一个现有代码的一部分从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; },c++,c,casting,C++,C,Casting,它建议构造函数调用。我试过静态施法,重新解释施法,但他们没有解决这个问题。我无法修改union或函数定义。有什么方法能使这个工作类似于C?< /p> 。你可以在C++中聚合构建一个大部分时间: //foo x; //x = (foo)a; <-- Wrong foo x = {a}; // Right //foo x; //x=(foo)a可以在C++中聚合构建大部分时间: //foo x; //x = (foo)a; <-- Wrong foo x = {a}; // Right
//foo x;
//x = (foo)a; <-- Wrong
foo x = {a}; // Right
//foo x;
//x=(foo)a可以在C++中聚合构建大部分时间:
//foo x;
//x = (foo)a; <-- Wrong
foo x = {a}; // Right
//foo x;
//x=(foo)a<在C++中,联合也可以使用构造函数,因此您可以只为<代码> 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 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;
将适当的转换构造函数添加到foo
。如果无法更改定义,可以使用(内联
?)帮助函数来构造foo。您还可以设置var
字段。向foo
添加适当的转换构造函数。如果无法更改定义,您可以使用(inline
?)帮助函数来构造foo。您还可以设置var
字段。我无法修改union或函数定义。
我认为这个答案行不通,给定问题。第二个答案有效-它不会修改联合或函数的定义。我不能修改联合或函数的定义。
给定问题,我不相信这个答案有效。第二个答案有效-它不会修改联合或函数的定义。