ActorItr 迭代器变量中有什么,* ActorItr 返回什么?

What's inside the ActorItr iterator variable and what * ActorItr returns?

本文关键字:ActorItr 什么 返回 迭代器 变量      更新时间:2023-10-16

在虚幻引擎C++编程中

for (TActorIterator ActorItr(GetWorld()); ActorItr; ++ActorItr) 
{ // Same as with the Object Iterator, access the subclass instance with the * or -> operators.
AStaticMeshActor *Mesh = *ActorItr; 
ClientMessage(ActorItr->GetName()); 
ClientMessage(ActorItr->GetActorLocation().ToString()); 
} 
AStaticMeshActor *Mesh = *ActorItr

在上面的代码中,Mesh 是一个类型AStaticMeshActor的指针。因此,您必须收到内存地址。但我的疑问是为什么要使用 *运算符?为什么不直接使用ActorItr& ( *ActorItr)

AStaticMeshActor *Mesh = ActorItr ----->Error
AStaticMeshActor *Mesh = &(*ActorItr) ------>Error

*ActorItr返回指向对象的地址还是返回Actoritr指向的对象?为什么虚幻引擎会将对象本身分配给期望接收内存地址的变量?

谢谢。。。

ActorItr显然是某种容器迭代器,GetWorld()返回一个包含AStaticMeshActor*指针的容器。

*ActorItr取消引用迭代器以访问(引用)实际的容器元素,该元素恰好是示例中的AStaticMeshActor*指针。

你不能将ActorItr本身分配给Mesh,因为迭代器本身不是一个AStaticMeshActor*指针,只有它引用的元素才是。

&(*ActorItr)也会失败,因为这会取消引用迭代器以获取AStaticMeshActor*指针,然后获取该指针的地址,从而生成AStaticMeshActor**指针。

同样,ActorItr->也会取消引用迭代器以访问基础容器元素,因此您将在指向的AStaticMeshActor对象上调用GetName()GetActorLocation()

所有输入/输出迭代器都可以通过operator*去引用,输入迭代器也可以通过operator->去引用。