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;
}

将主函数中的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,但他们没有解决此问题。我无法修改并集或函数定义。有什么办法可以使它像C一样工作吗?

巴里

在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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C / C ++将void *强制转换为int(*())(int,...);

C是否允许将结构类型强制转换为自身?

将指针强制转换为从C中的int函数返回的int是否安全?

C#XmlSerializer强制将编码类型转换为ISO-8859-1

在C中,将int强制转换为struct *会在内存中发生什么?

将int强制转换为字节数组时的C ++字节顺序

强制将C#强制转换为通用

程序的输出,以c ++格式,&int转换为char *强制转换

将C ++类型转换为C#

C ++在声明为void类型后将int转换为int?

C# - 无法将类型“int”隐式转换为“int[][]” - CodeFights

使用类型转换将char转换为int在C中将1转换为49,将0转换为48?

重新解释强制转换为不同类型的C ++

C ++将对象强制转换为其原始类型

强制转换为定义的C#类型时发生InvalidCastException

在C#中强制转换为反射类型

在C#中强制转换为任何类型的泛型

强制转换为较小类型时,C ++会截断

C#-如何强制转换为基本类型?

防止将对象强制转换为C ++以外的任何类型

将Python返回的类型转换为C ++

C ++将数字转换为类型的指针?

应该使用哪种类型的C ++强制转换将结构的指针强制转换为其第一个成员?

ARC不允许将非目标C指针类型'int *'隐式转换为'Bird *'

无法将类型'int'隐式转换为'string'c#

错误 2 无法将类型“int”隐式转换为“string”c#

C ++将* string转换为int

使C ++自动将int转换为double

将char **转换为int C ++