繁体   English   中英

在不兼容的类型之间转换

[英]Converting Between Incompatible Types

在我的代码中的某些地方,我使用_mm_prefetch function,它接受const char *int 第一个参数是要预取的 object 的 memory 地址。 由于它是const char *而不是void* ,因此需要强制转换。

注意:在下面的上下文中, nextActive是指向 object 的指针。

最初,我有:

_mm_prefetch( (const char *)this->nextActive, _MM_HINT_T1 );

这很好用; 但是,这会导致关于C++ 核心指南 Pro.safety:类型安全配置文件 Type.4 的警告。

我可以使用reinterpret_cast ,但是,这会导致违反上述类型 1a 的警告(不要使用reinterpret_cast

然后,我想,好吧,我可以转换为void*然后转换为const char* ,但这会导致类型 1d 的警告(当转换可能是隐式时,不要在指针类型之间转换

_mm_prefetch( static_cast<const char *>( static_cast<void *>( this->nextActive ) ), _MM_HINT_T1 );

除了在使用_mm_prefetch时抑制警告之外,是否有适当的方法在两种不兼容的类型之间进行转换? 还是总是会有警告,因为(当然)您可能不应该在不同类型之间进行转换?

这应该解决它:

void* ptr = this->nextActive;
_mm_prefetch(static_cast<const char*>(ptr), _MM_HINT_T1);

唯一的转换是从void*const char* ,这是允许的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM