在完成教程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()
答案 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}}使用您看到的语法。