1

我有一段代码说

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)

其中 的 类型internalItrunordered_mapinternalItr->second给出 的实例HostTraffic

4

4 回答 4

3

internalIPItr->second.outboundPortIPs由给出的指向 的地址的指针&被转换为void*

于 2012-12-17T08:10:31.713 回答
1

您正在传递一个指向internalIPItr->second.outboundPortIPs一个函数的指针,该函数需要void*.

接受的&地址internalIPItr->second.outboundPortIPs(即给你一个指向它的指针)。 (void*)将该指针转换为void.

于 2012-12-17T08:09:51.713 回答
1

internalPltr是一个指向结构的指针,它有一个名为的成员second,它有一个名为outboundPortIPs. &(addressof) 运算符返回其内存地址,然后将该(void *)地址强制转换(执行显式类型转换)为 void 指针。

于 2012-12-17T08:12:15.567 回答
0

已经回答的是它的作用(返回 a void*

但是你应该预先警告这种类型的转换称为“类型双关语”,它被认为是未定义的行为。(虽然,它适用于我所知道的所有编译器,并设置或取消设置了适当的编译选项。)

于 2012-12-17T08:15:02.250 回答