这个C++构造有什么作用?

Moe*_*oeb 2 c++ casting

在某些代码行中,我遇到了这个构造......

//void* v = void* value from an iterator
int i = (int)(long(v))
Run Code Online (Sandbox Code Playgroud)

这个结构有什么可能的用途?

为什么不简单地使用int(v)呢?为什么演员阵容long第一?

Len*_*ate 8

它最有可能使警告无声.

假设一个32位架构的sizeof(int)<sizeof(long)和sizeof(long)== sizeof(void*),如果你将void*转换为int,你可能会得到一个警告,如果你将void*转换为没有警告只要你没有截断.然后,您会收到一个警告,指定long到int(可能的截断),然后通过显式从long转换为int来删除.

不知道编译器很难说,但我确实看到了防止警告所需的多步演员表.为什么不尝试将构造转换为您认为应该是什么,并查看编译器所说的内容(当然,如果您使用相同的编译器和相同的警告级别,这只会帮助您找出原始程序员的想法)因为他们).