-5

在浏览教程 9 的http://www.omnetpp.org/doc/omnetpp/tictoc-tutorial/part2.html给出的 OMNeT 教程时,我遇到了一些令人困惑的符号:

void Tic9::sendCopyOf(cMessage *msg)
{
    cMessage *copy = (cMessage *) msg->dup();
    send(copy, "out");
}

代码非常简短整洁,但是由于我对 C++ / OMNeT 的经验很少,我无法理解这里的这一行是做什么的:cMessage *copy = (cMessage *) msg->dup();,更具体地说是(cMessage *). 我知道msg->dup()其实意思(*msg).dup()

谁能详细说明一下,内存中实际发生了什么?

发布编辑附录:

代码dup()

virtual cMessage *dup() const 
{
return new cMessage(*this);
}

描述dup()创建并返回此对象的精确副本。 这是否意味着在(cMessage *) msg->dup()内部传递由msg->dup()to返回的对象的地址*copy?

另一个令人困惑的符号:

cMessage *Tic9::generateNewMessage()
{
    // Generate a message with a different name every time.
    char msgname[20];
    sprintf(msgname, "tic-%d", ++seq);
    cMessage *msg = new cMessage(msgname);
    return msg;
}

*类名前面的在这里是什么意思:*Tic9::generateNewMessage()

4

2 回答 2

0

让我们假设msg->dup()返回void *- 即指向 的指针void,这意味着编译器不跟踪其类型的指针。但是您可能知道,例如由于该函数的文档,或者由于满足某些先决条件,这msg->dup()将返回一个指向CMessage. 在您可以使用返回值之前,您需要告诉编译器实际上是什么类型。你可以通过转换void *to 来做到这一点CMessage *,它使用你看到的语法。

于 2014-08-17T19:17:58.020 回答
0

记忆中什么也没有发生。它只是一个 C 风格的类型转换。

http://en.cppreference.com/w/cpp/language/explicit_cast

您可能想了解有关该语言基础知识的更多信息。C++ 使用起来很棘手。

于 2014-08-17T19:10:57.130 回答