在无效索引处访问 TArray 是否安全?
Is it safe to access TArray at an invalid index?
我想知道以下代码是否 return nullptr
可靠且没有任何并发症:
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
没有。根据documentation,这是不允许的:
Passing an invalid index — less than 0 or greater than or equal to Num() — will cause a runtime error.
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
以上代码导致 运行 时间错误,因为索引大于或等于数组的大小。
在使用索引访问元素之前,请检查索引与数组的大小。索引应小于数组的大小。
尝试访问 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 ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;
我想知道以下代码是否 return nullptr
可靠且没有任何并发症:
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
没有。根据documentation,这是不允许的:
Passing an invalid index — less than 0 or greater than or equal to Num() — will cause a runtime error.
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
以上代码导致 运行 时间错误,因为索引大于或等于数组的大小。
在使用索引访问元素之前,请检查索引与数组的大小。索引应小于数组的大小。
尝试访问 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 ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;