_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() 宏。两者都映射到charwchar_t,具体取决于在编译期间是否分别定义了_UNICODEUNICODE。两者通常一起定义/未定义,因此很多人倾向于互换它们并且事情通常有效。但它们在逻辑上是分开的,应该被相应地对待。将_TCHAR_T() 与C 函数一起使用。将 TCHARTEXT() 与 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的第二个和第三字符(用啥函数)?

MFC 将含中文的CString写入文本

C++中 string 和cstring 头文件 有啥区别????

vc6和vc7中的CString有啥区别?

MFC 把CString格式的时间添加到时间控件(CDateTimeCtrl)中去

CString : (TCHAR*)(this + 1) 是啥意思?