我有一段代码说
clock.start();
for (unordered_map <uint32_t,HostTraffic>::iterator internalIPItr = hostTraffic.begin();
internalIPItr != hostTraffic.end();
++internalIPItr)
{
if (!pgBulkInserter.insert(NULL, internalIPItr -> first,
internalIPItr -> second.inboundFlows,
(void*)&(internalIPItr -> second.outboundPortIPs),
internalIPItr -> second.roles)) {
return -1;
}
clock.incrementOperations();
}
我的问题是我不理解
的含义(void*)&(internalIPItr -> second.outboundPortIPs).
您可以将for(....)
视为
for (int internalItr = beginning -> end)
其中internalItr
的类型为unordered_map
,internalItr->second
的实例为HostTraffic
。
答案 0 :(得分:2)
由internalIPItr->second.outboundPortIPs
给出的指向&
地址的指针将转换为void*
。
答案 1 :(得分:1)
您将指向internalIPItr->second.outboundPortIPs
的指针传递给void*
的函数。
&
获取internalIPItr->second.outboundPortIPs
的地址(即为您提供指向它的指针)。 (void*)
将指针强制转换为void
。
答案 2 :(得分:1)
internalPltr
是一个指向结构的指针,它有一个名为second
的成员,其成员名为outboundPortIPs
。 &
(addressof)运算符返回其内存地址,然后(void *)
强制转换(执行显式类型转换),该地址为void指针。
答案 3 :(得分:0)
已经回答了它的作用(返回void*
)
但是你应该预先警告这种类型的铸造被称为“类型双关语”并且它被认为是未定义的行为。 (尽管如此,它适用于我所知道的所有编译器,并且设置了相应的编译选项或未设置。)