草庐IT

reinterpret_casting

全部标签

c++ - static_cast 和 reinterpret_cast 有什么区别?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whenshouldstatic_cast,dynamic_castandreinterpret_castbeused?我在c++中使用c函数,其中在c中作为void类型参数传递的结构直接存储相同的结构类型。例如在C中。voidgetdata(void*data){Testitem*ti=data;//Testitemisofstructtype.}为了在c++中做同样的事情,我使用static_cast:voidfoo::getdata(void*data){Testitem*ti=static_cast(

c++ - static_cast 和 reinterpret_cast 有什么区别?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whenshouldstatic_cast,dynamic_castandreinterpret_castbeused?我在c++中使用c函数,其中在c中作为void类型参数传递的结构直接存储相同的结构类型。例如在C中。voidgetdata(void*data){Testitem*ti=data;//Testitemisofstructtype.}为了在c++中做同样的事情,我使用static_cast:voidfoo::getdata(void*data){Testitem*ti=static_cast(

interface - Golang : Can I cast to chan interface{}

我正在尝试为订阅编写一个通用包装器,例如:typeSubscriberinterface{Subscribe(addrstring)chaninterface{}}假设我想使用一个库,其中有一个订阅方法,但它使用chanlibrary.Object。我希望能够做类似的事情:func(s*mySubscriber)Subscribe(addrstring)chaninterface{}{ch:=make(chanlibrary.Object)library.Subscribe(addr,ch)returnchaninterface{}(ch)}目前,我认为这样的Actor阵容是不可能的。

interface - Golang : Can I cast to chan interface{}

我正在尝试为订阅编写一个通用包装器,例如:typeSubscriberinterface{Subscribe(addrstring)chaninterface{}}假设我想使用一个库,其中有一个订阅方法,但它使用chanlibrary.Object。我希望能够做类似的事情:func(s*mySubscriber)Subscribe(addrstring)chaninterface{}{ch:=make(chanlibrary.Object)library.Subscribe(addr,ch)returnchaninterface{}(ch)}目前,我认为这样的Actor阵容是不可能的。

Golang : cast an interface to a typed variable dynamically

在go中,是否可以以某种方式动态转换变量?例如,如果一个简单的Actor是:varintAge=interfaceAge.(int)如果我事先不知道年龄是一个整数怎么办?一个简单的写法是varx=getType()varsomeTypeAge=interfaceAge(.x)有没有办法实现这样的目标?reflect包提供了一些在运行时确定或强制转换类型的方法-但我找不到像上面提到的任何东西(适用于所有类型的通用方案)。 最佳答案 不,你不能。Go是一种静态类型语言。变量的类型是在编译时确定的。如果您想动态确定interface{}的

Golang : cast an interface to a typed variable dynamically

在go中,是否可以以某种方式动态转换变量?例如,如果一个简单的Actor是:varintAge=interfaceAge.(int)如果我事先不知道年龄是一个整数怎么办?一个简单的写法是varx=getType()varsomeTypeAge=interfaceAge(.x)有没有办法实现这样的目标?reflect包提供了一些在运行时确定或强制转换类型的方法-但我找不到像上面提到的任何东西(适用于所有类型的通用方案)。 最佳答案 不,你不能。Go是一种静态类型语言。变量的类型是在编译时确定的。如果您想动态确定interface{}的

casting - Go:在类型开关中将任何 int 值转换为 int64

我经常遇到这样的情况,我期望int(任何类型,int/int8/16/32/64)并使用类型开关检查它switcht:=v.(type){caseint,int8,int16,int32,int64://casttoint64caseuint,uint8,uint16,uint32,uint64://casttouint64}现在我不能使用直接转换,因为t在这种情况下,类型为interface{}.我真的必须把它分成case吗?s每个整数类型?我知道我可以使用reflect.ValueOf(v).Int()通过反射来做到这一点,但不应该有更好(不那么冗长)的方法吗?更新:提交了一个问题

casting - Go:在类型开关中将任何 int 值转换为 int64

我经常遇到这样的情况,我期望int(任何类型,int/int8/16/32/64)并使用类型开关检查它switcht:=v.(type){caseint,int8,int16,int32,int64://casttoint64caseuint,uint8,uint16,uint32,uint64://casttouint64}现在我不能使用直接转换,因为t在这种情况下,类型为interface{}.我真的必须把它分成case吗?s每个整数类型?我知道我可以使用reflect.ValueOf(v).Int()通过反射来做到这一点,但不应该有更好(不那么冗长)的方法吗?更新:提交了一个问题

c++ - 在 64 位机器上编译 32 位代码时,我应该如何处理 "cast from ‘void*’ 到 ‘int’ 丢失精度?

我有一个可以在32位机器上编译并正常工作的包。我现在正在尝试让它在64位机器上编译并发现以下错误-error:castfrom‘void*’to‘int’losesprecision是否有一个编译器标志来抑制这些错误?还是我必须手动编辑这些文件以避免这些强制转换? 最佳答案 问题在于,在32位中,int(它是一个32位整数)将保存一个指针值。当您移至64位时,您不能再将指针存储在int中-它不足以容纳64位指针。intptr_ttype就是为此而设计的。 关于c++-在64位机器上编译3

c++ - 在 64 位机器上编译 32 位代码时,我应该如何处理 "cast from ‘void*’ 到 ‘int’ 丢失精度?

我有一个可以在32位机器上编译并正常工作的包。我现在正在尝试让它在64位机器上编译并发现以下错误-error:castfrom‘void*’to‘int’losesprecision是否有一个编译器标志来抑制这些错误?还是我必须手动编辑这些文件以避免这些强制转换? 最佳答案 问题在于,在32位中,int(它是一个32位整数)将保存一个指针值。当您移至64位时,您不能再将指针存储在int中-它不足以容纳64位指针。intptr_ttype就是为此而设计的。 关于c++-在64位机器上编译3