ue4字符串 区别 文本_Unreal TEXT FText,FName,FString 浅谈

在下接触UE不久,一开始遇到这个FString str = TEXT("Hello");表示有点懵逼,为啥每次声明一个所谓的字符串类型都需要,而且,UE中几乎很少使用std::string = "hello",这是为何呐。

有FString,FName,FText,这里,就讲一下,为何会有这些。

1.来历

UE4有三个常用的字符串类,FName,FText,FString,为啥呐,一句话,因为游戏对于性能的要求是很高的,普通的string满足不了UE游戏开发性能需求,所以,FString,FName,FText出现,为了解决不同的游戏开发需求,适应不同情况下字符串的要求。

2.区别

FName,给某个东西命名的,FName不区分大小写,为便于快速定位某个资源,std:string里会直接比较字符串内容,时间复杂度最坏情况为O(m*n),FName当创建时,会根据字符串内容计算出一个Hash值,这样实现比较逻辑的时候不用比较字符串内容,而是直接比较hash值是否相等,就是O(1). 注意:FName 不区分大小写

FText,相对FName,FText有点重, 看到的文本,都是FText,可以用于多语言功能。

FString最接近std:string,不同于前面两种,他创建后是可修改的。提供了大量操作字符串的方法。性能差。FString 本质上是一个地址类型。

3.转换规则

TestString = TestName.ToString();

TestString = TestText.ToString();

TestName = FName(*TestString);

TestName = TestText !!! 从FText到FName转换不存在,但是可以通过先转到FString,再转到FName,但是不可靠,因为FName不区分大小写。

TestText = FText::FromName(TestName)

TestText = FText::FromString(TestString)

综上

4.Text宏

为何FString str = TEXT("Hello");

如果未使用TEXT()宏,将使用ANSI对文字进行编码,会导致支持字符高度受限(简单来说,会乱码)。传入FString的ANSI文字需要完成到TChar的转换

5.参考

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值