📌  相关文章
📜  FString 中的 fname - C++ (1)

📅  最后修改于: 2023-12-03 15:15:12.163000             🧑  作者: Mango

FString 中的 fname - C++

FString 是 Unreal Engine 4 中的一个字符串类,它具有比 C++ 中原生的 std::string 更强的功能和更好的性能。在 FString 中,fname 是一种特殊的字符串类型,也称为 fast name,它用于快速寻找字符串的索引,特别是在 Unreal Engine 4 中使用 Blueprint 的情况下。

fname 的定义和用法

fname 是在 FString 中定义的一种数据类型,它使用了 Name 表来存储字符串的索引,对于相同的字符串,只需要存储一次。在 Unreal Engine 4 中,fname 主要用于快速比较字符串和寻找字符串的索引,特别是在处理 Blueprint 时非常有用。

在 FString 中,fname 的定义如下:

typedef FName FName;

typedef TNameEntryArray FNameTableType;

class FString
{
    ...
public:
    typedef FName fname;
    ...
};

由于 FString 中的 fname 是预定义的类型,因此可以直接使用。例如:

FString str = TEXT("Hello World!");
FString::fname fname = *str;

上面的代码将字符串 str 转换为了 fname,以便进行快速比较和索引查找。

fname 的性能

fname 主要是为了提高字符串比较和索引查找的性能而设计的。在 Unreal Engine 4 中,fname 的实现使用了散列表和 Name 表,因此具有非常高的查找速度。例如,使用 strcmp() 函数比较两个字符串需要 O(n) 的时间复杂度,而使用 fname 的比较则只需要 O(1) 的时间复杂度,因为它只需要比较两个索引即可。

在 Unreal Engine 4 中,fname 的性能测试结果表明,它比普通字符串快 10 倍以上,这个巨大的差距可以显著提高程序的性能和响应速度。

总结

总之,FString 中的 fname 是一种快速查找字符串的索引类型,它主要用于提高字符串比较和索引查找的性能,特别是在 Unreal Engine 4 中使用 Blueprint 的情况下。fname 的实现使用了散列表和 Name 表,具有非常高的查找速度,可以显著提高程序的性能和响应速度。