_T 在 CString 中代表啥
Posted
技术标签:
【中文标题】_T 在 CString 中代表啥【英文标题】:What does _T stands for in a CString_T 在 CString 中代表什么 【发布时间】:2013-03-08 01:02:45 【问题描述】:字符串中的“T”代表什么。例如 _T("Hello")。我在需要 unicode 支持的项目中看到了这一点。它实际上告诉处理器什么
【问题讨论】:
【参考方案1】:_T
代表“文本”。当且仅当您使用 Unicode 支持编译源时,它才会将您的文字转换为 Unicode 宽字符文字。见http://msdn.microsoft.com/en-us/library/c426s321.aspx。
【讨论】:
技术上,_T()
仅用于 C 运行时库,用于_TCHAR
数据类型。 Win32 等效项是用于TCHAR
数据类型的TEXT()
宏。两者都映射到char
或wchar_t
,具体取决于在编译期间是否分别定义了_UNICODE
和UNICODE
。两者通常一起定义/未定义,因此很多人倾向于互换它们并且事情通常有效。但它们在逻辑上是分开的,应该被相应地对待。将_TCHAR
和_T()
与C 函数一起使用。将 TCHAR
和 TEXT()
与 Win32 API 一起使用。
@RemyLebeau:现在有一个棘手的问题:哪个与 MFC/ATL 的 CString
类型一起使用? CString
是根据 CRT 和 Windows API 实现的。
根据文档:“CString 基于TCHAR
数据类型。”,所以使用TEXT()
。【参考方案2】:
它实际上用于需要 Unicode 和 ANSI 支持的项目。它告诉编译器根据预编译器定义的值将字符串文字编译为 Unicode 或 ANSI。
您为什么要这样做是另一回事。如果您想单独支持 Unicode,那么只需编写 Unicode,在本例中为 L"Hello"
。当您需要支持 Windows NT 及更高版本(支持 Unicode)和 Windows 9x/ME(不支持)时,添加了 _T()
宏。如今,使用这些宏的任何代码都已过时,因为所有现代 Windows 版本都是基于 Unicode 的。
【讨论】:
【参考方案3】:来自 MSDN:
使用
_T
宏对文字字符串进行一般编码,因此它们在 Unicode 下编译为 Unicode 字符串或在没有 Unicode 的情况下编译为 ANSI 字符串(包括 MBCS)
【讨论】:
【参考方案4】:它代表文本。使用 IDE 工具时可以查看定义:
#define _TEXT(x) __T(x)
但我想把它记为“Transformable”或“swi-T-ch”:
L"Hello" //change "Hello" string into UNICODE mode, in any case;
_T("Hello") //if defined UNICODE, change "Hello" into UNICODE; otherwise, keep it in ANSI.
【讨论】:
以上是关于_T 在 CString 中代表啥的主要内容,如果未能解决你的问题,请参考以下文章
VC MFC下 定义 CString str 怎样获取str的第二个和第三字符(用啥函数)?
C++中 string 和cstring 头文件 有啥区别????