为什么将变量强制转换为void ?
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
以后的用法(edit):
#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相关的变量有好处?
如果你看一下这些行的责备,它们是在这个提交中添加的,并且提交消息"warnings under windows"。
您可以询问提交者,https://github.com/CheeseWiz,但我怀疑它只是归结为MSVC中的一个bug。
虽然它依赖于编译器,但它通常用于抑制"未使用的变量"消息。
我更喜欢UNUSED(var)
宏,因为它清楚地显示了意图,并且可以针对各种编译器环境进行定制。
相关文章:
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- 将void*转换为某种类型的shared_ptr
- 如何将 void* 转换为函数指针?
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 如何将 void 转换为 typedef void(..)(浮动)
- 无法将参数 1 从"int (__thiscall A::* *)(void)"转换为"int (__cdecl *)(void)"
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- x = malloc(n * sizeof (int));无法将 void 转换为 int
- 错误:请求从“ void”转换为“ QString”的非量表类型
- 使用 LLVM 从 const void * 转换为模板类型时出现问题
- 如何修复错误:请求从"void"转换为非标量类型"std::vector<int>"
- void* 转换为基类并调用虚函数
- 将 void* 转换为 std::function<void()>
- 无法将参数 4 从 'void' 转换为'const char *'
- C++11 无法将 std::condition_variable::wait 从 'void' 转换为 'bool'
- 如何在 C++11 中将"const void*"转换为函数指针?
- 似乎无法在 c++ 中将 void* 转换为结构
- 将 void 转换为字节
- void * 转换为 int 语法的问题
- C++从类型“void*”转换为类型“double”无效