我想知道以下代码是否可以可靠地返回nullptr
而没有任何复杂情况:
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
答案 0 :(得分:2)
没有。根据{{3}},这是不允许的:
传递无效索引 - 小于0或大于或等于Num() - 将导致运行时错误。
答案 1 :(得分:0)
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
上面的代码导致运行时错误,因为索引大于或等于数组的大小。
在使用索引访问元素之前,请检查具有数组大小的索引。索引应小于数组的大小。
答案 2 :(得分:0)
尝试访问TArray的无效索引是不安全的,但是在尝试读取索引之前,引擎提供了检查索引的便捷方法:
TArray<ASomeActor*> SomeActors;
if (SomeActors.IsValidIndex(0))
{
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
}
else
{
return nullptr;
}
会更安全。在尝试阅读之前检查数组的大小也是完全合理的:
If (SomeActors.Num() > 0)
{
return SomeActors[0];
}
如果需要进行const赋值,可以使用三元运算符:
const ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;