[英]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.