C ++中令人困惑的符号(OMNeT ++)

时间:2014-08-17 19:00:24

标签: c++ pointers omnet++

在完成教程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()返回的对象的地址传递给*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()

2 个答案:

答案 0 :(得分:0)

记忆中没有任何事情发生。它只是一个C风格的类型演员。

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

您可能想要了解有关该语言基础知识的更多信息。 C ++是一个棘手的问题。

答案 1 :(得分:0)

让我们假设msg->dup()返回void * - 即指向void的指针,这意味着指针编译器不跟踪的类型。但你可能知道,例如由于有关该函数的文档,或者因为已满足某些先决条件,msg->dup()将返回指向CMessage的指针。在您可以使用返回值之前,您需要告诉编译器实际上是什么类型。您可以通过投射 void *CMessage *来执行此操作,该{{1}}使用您看到的语法。