\UE_5.0\Engine\Source\Runtime\Core\Public\GenericPlatform\GenericPlatform.h
// A switchable character. In-memory only. Either ANSICHAR or WIDECHAR, depending on a licensee's requirements.
typedef WIDECHAR TCHAR;
不只是 TCHAR,所有字符类型的注释中都有。 “仅内存中”是什么意思?
Unreal 使用平台定义文件(例如
GenericPlatform.h
、AndroidPlatform.h
等)来指定引擎的某些方面(例如使用与平台相关的整数大小或字符宽度的模板类)在不同平台上的行为方式。
因此,在 Windows 和 iOS 上,相同的宏(即
TCHAR
)可能意味着不同的基础类型,并且相关类(例如 FString
)在这些平台上的行为会略有不同,表示值 in-memory一种针对底层架构更好优化的方法。
但是,磁盘上的数据(例如文本文件)应努力实现跨平台兼容性。所以两个平台上字符长度不同的同一个字符串应该以同样的方式保存到磁盘上。这就是为什么此类类的序列化编码和字符长度不一定与其内存中的表示相同。
例如,当您将
FString
保存到具有 FFileHelper::SaveStringToFile
的文件时,UE 会将其内存中字符重新编码为您指定类型的磁盘字符(ANSI 或 UTF-8 或其他),因为它直接保存包含任何 wchar_t
的文件没有什么意义(它是特定于实现的并且位长度不同)。