![](/img/trans.png)
[英]Difference between cast to &(void*&)variable vs. (void**)variable
[英]Why cast used variable to void
我目前正在查看FAST的OpenCV实现,并偶然发现了一些变为void
变量。 据我所知,当未使用变量时,这用于静音lint /编译器警告。 但在这种情况下,使用变量。 它可能与SSE有关,因为它只发生在那些代码部分。
#if CV_SSE2
__m128i delta = _mm_set1_epi8(-128), t = _mm_set1_epi8((char)threshold), K16 = _mm_set1_epi8((char)K);
(void)K16;
(void)delta;
(void)t;
#endif
后来的用法( 编辑 ):
#if CV_SSE2
...
__m128i v1 = _mm_xor_si128(_mm_subs_epu8(v0, t), delta);
...
int m = _mm_movemask_epi8(_mm_cmpgt_epi8(max0, K16));
...
#endif
另请参见:OpenCV-Repository中的full fast.cpp (我粘贴的代码来自第71行)
那么,它有什么好处,为什么只有SSE相关的变量呢?
虽然它依赖于编译器,但它通常用于抑制“未使用的变量”消息。
我更喜欢UNUSED(var)
宏,因为它清楚地显示了意图并且可以针对各种编译器环境进行自定义。
如果你看一下这些行的责任,就会在这个提交中添加它们,并提交消息“ windows下的警告 ”。
您可以询问提交者, https://github.com/CheeseWiz ,但我怀疑它只是归结为MSVC中的一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.