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++;将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

它建议构造函数调用。我试过静态施法,重新解释施法,但他们没有解决这个问题。我无法修改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<在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或函数定义。
我认为这个答案行不通,给定问题。第二个答案有效-它不会修改联合或函数的定义。
我不能修改联合或函数的定义。
给定问题,我不相信这个答案有效。第二个答案有效-它不会修改联合或函数的定义。